[Pandas] read_csv / to_csv
Pandas read_csv, Pandas to_csv, CSV pandas
정의
pandas.read_csv 는 CSV (Comma-Separated Values) 파일 또는 비슷한 텍스트 형식을 Pandas DataFrame 으로 읽는 함수. pandas 사용의 99% 가 여기서 시작.
대응 출력 함수는 DataFrame.to_csv.
기본 사용
import pandas as pd
df = pd.read_csv('data.csv')
df.to_csv('out.csv', index=False)
핵심 옵션
| 옵션 | 의미 |
|---|---|
sep / delimiter | 구분자 (기본 ,) |
header | 헤더 행 위치 (기본 0) |
names | 컬럼 이름 지정 (header 없을 때) |
index_col | 인덱스로 쓸 컬럼 |
usecols | 일부 컬럼만 |
dtype | 컬럼별 타입 강제 |
parse_dates | 날짜 자동 파싱 |
na_values | NA 로 취급할 값 |
nrows | 처음 N 행만 |
skiprows | 건너뛸 행 |
encoding | 인코딩 (utf-8, cp949, latin1) |
chunksize | 청크 단위로 읽기 |
자주 쓰는 패턴
tab 구분 / 인코딩
df = pd.read_csv('data.tsv', sep='\t', encoding='utf-8')
df = pd.read_csv('korean.csv', encoding='cp949') # 한글 Windows
일부 컬럼만, 타입 지정
python
import io
csv_text = """id,name,age,salary
1,Alice,30,3000
2,Bob,25,4500
3,Charlie,35,6000"""
df = pd.read_csv(
io.StringIO(csv_text),
usecols=['id', 'name', 'age'],
dtype={'id': 'int32', 'age': 'int8'},
)
print(df)
print(df.dtypes.tolist()) 결과
id name age
0 1 Alice 30
1 2 Bob 25
2 3 Charlie 35
[dtype('int32'), dtype('O'), dtype('int8')]날짜 파싱
df = pd.read_csv('events.csv', parse_dates=['created_at', 'updated_at'])
df = pd.read_csv('events.csv', parse_dates={'datetime': ['date', 'time']})
큰 파일을 청크로
total = 0
for chunk in pd.read_csv('huge.csv', chunksize=100_000):
total += chunk['amount'].sum()
print(total)
전체를 한 번에 메모리에 올리지 않고 100K 행씩 처리.
NA 처리
df = pd.read_csv('data.csv', na_values=['', 'NULL', 'N/A', '-'])
# 위 값들이 모두 NaN 으로 변환됨
저장 (to_csv)
df.to_csv('out.csv', index=False) # index 안 쓰기 (가장 흔함)
df.to_csv('out.csv', encoding='utf-8-sig') # Excel 한글 호환 BOM
df.to_csv('out.tsv', sep='\t')
df.to_csv('out.csv.gz', compression='gzip') # 자동 압축
자주 만나는 함정
1. index 가 0,1,2… 로 추가됨
df.to_csv('out.csv') # 첫 열에 0,1,2... 가 있음
df.to_csv('out.csv', index=False) # ✓ 보통 이걸 원함
2. 정수 컬럼이 float 으로 변함
NaN 이 하나라도 있으면 정수 타입을 유지 못 함 (NaN 이 float). 해법:
- pandas 1.x+ :
Int64(nullable integer) df['x'] = df['x'].astype('Int64')
3. 큰 파일의 메모리 폭주
dtype명시로 메모리 절약 (int8,category)usecols로 필요한 컬럼만chunksize로 스트리밍
4. 한글 깨짐
- Windows 에서 만든 CSV →
encoding='cp949' - Mac/Linux →
encoding='utf-8'기본 - BOM 있는 UTF-8 →
encoding='utf-8-sig'
참고
이 글의 용어 (3개)
- [Pandas] DataFramepandas
- 정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
- [Pandas] read_excel / to_excelpandas
- 정의 는 Excel 파일 (.xlsx, .xls) 을 으로 읽는 함수. 한국 실무에서 매우 자주 쓰인다. 의존 라이브러리 | 형식 | 필요한 패키지 | |:---|:---| | …
- [Pandas] read_json / to_jsonpandas
- 정의 은 JSON 문자열 또는 파일을 으로 변환. orient 파라미터가 핵심, JSON 구조를 어떻게 해석할지 결정한다. orient 옵션 비교 | orient | 구조 | 적…
💬 댓글