데이터 입출력과 인덱싱
교재 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'] # 특정 열 Series3. 새로운 열 만들기와 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