데이터 입출력과 인덱싱

교재 6.4 ~ 6.11 절. CSV 읽기, 데이터프레임 구조, 슬라이싱, loc · iloc 인덱서.


1. CSV / TSV 읽기

  • CSV (Comma Separated Values) — 쉼표 구분
  • TSV (Tab Separated Values) — 탭 구분
  • 데이터에 쉼표가 포함되면 반드시 따옴표로 감싸 구분자 충돌을 피함
PYTHON
import pandas as pd
 
# 로컬 파일
df = pd.read_csv('D:/data/vehicle_prod.csv')
 
# 웹 URL 직접 읽기
url = 'https://raw.githubusercontent.com/.../vehicle_prod.csv'
df = pd.read_csv(url)
 
# 한글 파일 — CP949 인코딩
df = pd.read_csv('weather.csv', encoding='CP949')

NumPy 2D 배열은 레이블이 없어 어떤 열이 무엇인지 한눈에 알기 어렵습니다. 판다스 read_csv헤더 + 인덱스를 함께 읽어 이 문제를 해결합니다.


2. 데이터프레임의 구조

  • 모든 DataFrame 은 index (행 레이블) + columns (열 레이블) 로 구성
  • 첫 열을 인덱스로 쓰려면 index_col=0 지정
PYTHON
df = pd.read_csv('vehicle_prod.csv', index_col=0)
 
df.index    # Index(['US', 'Japan', 'China', ...])
df.columns  # Index(['2007', '2008', '2009', '2010', '2011'])
 
df['2007']  # 특정 열 Series

3. 새로운 열 만들기와 axis

PYTHON
df['total'] = df['2007'] + df['2008'] + df['2009'] + df['2010'] + df['2011']
# 또는 더 간단히
df['total'] = df.sum(axis=1)
df['avg']   = df.mean(axis=1)
  • axis=0: 열 방향(세로) — 각 열에 대해 연산
  • axis=1: 행 방향(가로) — 각 행에 대해 연산

헷갈리기 쉬우니 "1 = 한 행 안에서 가로로 합침" 으로 기억.


4. inplace — 원본을 바꿀 것인가?

PYTHON
df.drop('B', axis=1, inplace=True)    # 원본이 바뀜, 반환값 없음
new_df = df.drop('B', axis=1)          # 원본 유지, 변경된 복사본 반환
  • inplace=True: 기존 DataFrame 자체 갱신
  • inplace=False(기본): 변경된 새 DataFrame 반환

5. 슬라이싱과 인덱싱

5.1 head() / tail()

PYTHON
df.head()      # 앞 5행
df.head(10)    # 앞 10행
df.tail(3)     # 뒤 3행

5.2 슬라이스 표기

PYTHON
df[0:3]        # 앞 3행
df[2:5]        # 3~5번째 행

5.3 loc[]레이블 기반

PYTHON
df.loc['Korea']             # 'Korea' 행 전체
df.loc[['US', 'Korea']]     # ← 이중 대괄호 필수
df.loc['Korea', '2009']     # 특정 셀 하나

df.loc['US', 'Korea']행 'US', 열 'Korea' 로 해석되어 KeyError 가 납니다. 여러 행을 뽑으려면 [[...]].

5.4 iloc[]정수 위치 기반

PYTHON
df.iloc[4]           # 5번째 행
df.iloc[0:3]         # 앞 3행
df.iloc[0:3, 1:3]    # 앞 3행, 2~3번째 열
df.iloc['Korea']     # ❌ 오류 — 정수만 허용

6. 네 가지 행 접근법 치트시트

방식기준예시
head() / tail()앞/뒤 n개df.head(3)
[m:n]정수 슬라이스df[2:5]
loc[]레이블df.loc['Korea']
iloc[]정수 위치df.iloc[4]

📝 Checkpoint

Quiz

데이터 입출력 Checkpoint

Q 1 / 3

df.sum(axis=1) 이 계산하는 것은?


🔗 다음 학습