Skip to content

Pandas read_csv() Tutorial: Import CSV Files Like a Pro

Updated on

pandas.read_csv() 함수는 데이터 분석에서 가장 자주 사용되는 도구 중 하나입니다. 작은 데이터셋부터 수 GB에 이르는 대용량 파일까지, read_csv() 동작 원리와 최적화 방법을 이해하면 시간, 메모리, 디버깅 비용을 크게 줄일 수 있습니다.

이 2025년 최신 가이드는 Pandas 2.0PyArrow 엔진을 포함해, 인코딩 처리, 날짜 파싱, 자주 발생하는 에러 해결까지 — CSV 파일을 깔끔하고, 빠르고, 정확하게 불러오기 위해 필요한 모든 내용을 다룹니다.


⚡ DataFrame에서 바로 차트를 보고 싶다면?

PyGWalker는 Pandas/Polars DataFrame을 Jupyter Notebook 안에서 바로 쓸 수 있는 인터랙티브 시각화 UI로 바꿔줍니다.

컬럼을 드래그 & 드롭 → 즉시 차트 생성 → 데이터를 시각적으로 탐색하세요.

한 줄로 바로 써볼 수 있습니다:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
Run in Kaggle (opens in a new tab)Run in Google Colab (opens in a new tab)⭐️ Star PyGWalker (opens in a new tab)

pandas.read_csv()란?

read_csv()는 CSV 파일을 pandas의 핵심 자료구조인 DataFrame으로 가져오는 기본 메서드입니다. 다음과 같은 기능을 지원합니다:

  • 사용자 정의 구분자
  • 결측값 처리
  • 자동 타입 추론 또는 수동 타입 지정
  • 날짜 파싱
  • 대용량 파일 스트리밍
  • 여러 파서 엔진 (Python, C, PyArrow)
  • 로딩 시 바로 인덱스 설정
  • 효율적인 컬럼 선택

Pandas 2.0에서는 더 빠르고 메모리를 적게 쓰는 백엔드인 PyArrow를 도입해 CSV 로딩 성능이 한층 강화되었습니다.


기본 사용법

import pandas as pd
 
df = pd.read_csv("your_file.csv")
df.head()

겉보기에는 단순하지만, 실제 프로젝트의 CSV 파일은 이렇게 깔끔하지 않은 경우가 대부분입니다. 이제부터 가장 유용한 파라미터들을 살펴보겠습니다.


자주 쓰는 read_csv() 파라미터 (퀵 레퍼런스)

ParameterDescription
sep컬럼 구분 문자 (기본값 ,)
usecols일부 컬럼만 선택해서 로드
index_col특정 컬럼을 인덱스로 설정
dtype데이터 타입을 직접 지정
parse_dates날짜 컬럼을 자동으로 datetime으로 파싱
na_values결측값으로 인식할 값들을 지정
on_bad_lines잘못된 행 처리 방식 (무시, 경고 등)
engine파서 선택: "python", "c", "pyarrow"
chunksize대용량 파일을 청크 단위로 스트리밍 읽기
encoding인코딩 지정 (utf-8, latin-1 등)

1. 특정 컬럼을 인덱스로 설정하기

방법 A — 로딩 후에 설정:

df = df.set_index("id")

방법 B — 로딩하면서 바로 설정:

df = pd.read_csv("file.csv", index_col="id")

2. 필요한 컬럼만 읽어오기

로딩 속도를 높이고 메모리 사용량을 줄일 수 있습니다:

df = pd.read_csv("file.csv", usecols=["name", "age", "score"])

3. 결측값 처리하기

df = pd.read_csv("file.csv", na_values=["NA", "-", ""])

4. 날짜 컬럼 자동 파싱

df = pd.read_csv("sales.csv", parse_dates=["date"])

Pandas가 적절한 datetime 포맷을 자동으로 추론합니다.


5. 인코딩 에러 해결하기 (매우 흔함)

df = pd.read_csv("file.csv", encoding="utf-8", errors="ignore")

UTF-8로 안 될 때는:

df = pd.read_csv("file.csv", encoding="latin-1")

6. PyArrow 엔진 사용하기 (Pandas 2.0+)

더 빠른 파싱과 나은 메모리 효율을 위해:

df = pd.read_csv("file.csv", engine="pyarrow")

새로운 Arrow 기반 dtype과 함께 쓰려면:

df = pd.read_csv(
    "file.csv",
    engine="pyarrow",
    dtype_backend="pyarrow"
)

7. 대용량 CSV 읽기 (1GB–100GB)

chunksize로 청크 단위 처리:

reader = pd.read_csv("big.csv", chunksize=100_000)
 
for chunk in reader:
    process(chunk)

또는 필요한 컬럼과 타입만 로드:

df = pd.read_csv(
    "big.csv",
    usecols=["user_id", "timestamp"],
    dtype={"user_id": "int32"},
)

8. 자주 발생하는 에러와 해결 방법

❌ UnicodeDecodeError

다음과 같이 시도:

encoding="latin-1"

❌ ParserError: Error tokenizing data

파일에 형식이 깨진 행이 있는 경우:

pd.read_csv("file.csv", on_bad_lines="skip")

❌ 대용량 파일에서 MemoryError

다음 옵션들을 활용:

  • chunksize
  • usecols
  • Arrow 백엔드 (dtype_backend="pyarrow")

❌ 구분자를 잘못 인식했을 때

pd.read_csv("file.csv", sep=";")

실전 예제: 깔끔하게 CSV 가져오기

df = pd.read_csv(
    "sales.csv",
    sep=",",
    parse_dates=["date"],
    dtype={"amount": "float64"},
    na_values=["NA", ""],
    engine="pyarrow"
)

CSV를 언제 쓰고, 언제 피해야 할까?

CSV는 다음과 같은 경우에 적합합니다:

  • 이식성과 호환성이 중요할 때
  • 단순한 파이프라인
  • 소/중규모 데이터셋

다만 다음이 중요하다면 CSV는 피하는 것이 좋습니다:

  • 고성능(속도)
  • 강력한 압축
  • 스키마 일관성
  • 복잡한 데이터 타입

대규모 분석 워크로드에는 Parquet 같은 포맷을 사용하는 편이 좋습니다.


자주 묻는 질문 (FAQ)

구분자를 자동으로 감지할 수 있나요?

pd.read_csv("file.csv", sep=None, engine="python")

헤더 앞의 행들을 건너뛰려면?

pd.read_csv("file.csv", skiprows=3)

압축된 CSV(zip)를 바로 읽을 수 있나요?

pd.read_csv("file.csv.zip")

마무리

pandas.read_csv()는 작은 CSV부터 수 GB 규모의 대용량 CSV까지 대부분의 상황을 처리할 수 있는 강력하고 유연한 도구입니다.

핵심 파라미터를 이해하고, Pandas 2.0에서 PyArrow를 적절히 활용하며, 컬럼 선택·날짜 파싱·에러 처리 같은 모범 사례를 적용하면 데이터 로딩 워크플로우의 효율을 크게 끌어올릴 수 있습니다.


더 많은 Pandas 튜토리얼