수십 메가바이트가 넘는 CSV를 pd.read_csv로 불러올 때마다
몇 초씩 기다리게 되면, 분석을 반복할수록 그 시간이 쌓입니다.
그런데 같은 파일이라도 읽는 방법을 조금만 바꾸면 훨씬 빨라집니다.
무엇을 바꾸면 얼마나 빨라지는지 실제로 재 봤습니다.

100만 행 CSV로 방법을 비교했습니다
id, 도시, 금액 등 6개 열에 100만 행,
약 40MB짜리 CSV를 만들어 네 가지 방법으로 읽어 시간을 쟀습니다.
측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarrow입니다.
각 방법을 여러 번 실행해 가장 빠른 값을 적었습니다.
| 읽는 방법 | 시간 | 기본 대비 |
|---|---|---|
| 기본 read_csv | 1.01초 | 기준 |
| dtype 지정 | 0.85초 | 1.2배 빠름 |
| usecols로 필요한 3열만 | 0.71초 | 1.4배 빠름 |
| engine="pyarrow" | 0.09초 | 약 11배 빠름 |
시간은 컴퓨터 상태에 따라 달라지지만,
방법 간의 순서와 격차는 여러 번 돌려도 비슷하게 유지됐습니다.
방법 1: 열의 타입을 미리 알려 준다
pandas는 CSV를 읽을 때 각 열이 숫자인지 글자인지 스스로 훑어 추측합니다.
이 추측에 시간이 걸립니다.
dtype으로 타입을 미리 알려 주면 그 과정을 건너뛰어 조금 빨라지고,
무엇보다 메모리를 크게 아낍니다.
dtypes = {
"id": "int32",
"city": "category", # 반복되는 문자열은 category가 효율적
"status": "category",
"amount": "int32",
}
df = pd.read_csv("big.csv", dtype=dtypes)
실제로 이 데이터에서 메모리 사용량이
68MB에서 29MB로 절반 아래까지 줄었습니다.
도시나 상태처럼 같은 값이 반복되는 열을 category로 지정한 효과가 큽니다.
방법 2: 필요한 열만 읽는다
분석에 세 개 열만 쓴다면 나머지를 읽을 이유가 없습니다. usecols로 쓸 열만 지정하면 읽는 양 자체가 줄어 빨라집니다.
df = pd.read_csv("big.csv", usecols=["id", "city", "amount"])
열이 많은 넓은 CSV일수록 이 방법의 효과가 커집니다. 파일을 처음 열어 어떤 열이 있는지 확인한 뒤, 필요한 것만 골라 읽는 습관이 도움이 됩니다.
방법 3: pyarrow 엔진을 쓴다
가장 극적인 차이를 낸 방법입니다. pandas는 CSV를 해석하는 엔진을 고를 수 있는데, engine="pyarrow"를 쓰면 여러 코어를 활용해 훨씬 빠르게 읽습니다.
df = pd.read_csv("big.csv", engine="pyarrow")
이 실험에서는 기본보다 약 11배 빨랐습니다. 다만 pyarrow가 설치돼 있어야 하고, 일부 세부 옵션은 기본 엔진과 동작이 다를 수 있어, 큰 파일을 단순히 빠르게 불러올 때 특히 유용합니다.
파일이 메모리보다 클 때: 나눠 읽기
파일이 너무 커서 한 번에 올리면 메모리가 부족하다면,
chunksize로 잘라 읽습니다.
정해진 행 수만큼씩 나눠 처리하므로 메모리를 아낄 수 있습니다.
total = 0
for chunk in pd.read_csv("big.csv", chunksize=100_000):
total += chunk["amount"].sum() # 조각마다 부분 합산
이 방식은 속도를 위한 것이 아니라, 통째로 올릴 수 없을 만큼 큰 파일을 다루기 위한 방법입니다.
그래서 무엇부터 적용할까
큰 파일을 빠르게 읽는 게 목적이면 engine="pyarrow"를 먼저,
메모리가 부담이면 dtype 지정과 usecols를 함께 쓰면 됩니다.
파일이 메모리를 넘길 정도로 크면 chunksize로 나눠 읽습니다.
자주 묻는 질문
Q. pyarrow 엔진이 항상 빠른가요?
큰 파일에서 특히 효과가 큽니다. 작은 파일은 차이가 미미하고, 기본 엔진에만 있는 일부 옵션을 쓰면 그대로 두는 편이 나을 수 있습니다.
Q. dtype을 잘못 지정하면 어떻게 되나요?
값이 지정한 타입에 안 맞으면 읽다가 오류가 납니다. 확실한 열부터 지정하고, 애매하면 비워 두어 pandas가 추측하게 하면 됩니다.
Q. 매번 CSV로 읽는 게 느리면 다른 방법은요?
같은 데이터를 반복해 읽는다면 한 번 Parquet로 저장해 두는 방법이 있습니다. Parquet는 열 단위로 저장돼 읽기가 빠르고 용량도 작습니다.
같은 CSV라도 타입을 알려 주고, 필요한 열만 고르고, 빠른 엔진을 쓰면
기다리는 시간이 크게 줄어듭니다.
지금 자주 읽는 큰 CSV가 있다면 engine="pyarrow" 한 줄부터 더해 시간을 비교해 보세요.
한컴 없이 hwp 열기, 확장자 바꾸기가 안 통하는 이유와 실제로 되는 방법
hwp 파일을 받았는데 열리지 않을 때 확장자를 doc로 바꿔 보라는 조언을 자주 만납니다.그런데 막상 해 보면 워드가 파일을 집어 드는 것 같다가 깨진 글자만 잔뜩 뱉거나 아예 거부합니다. 왜 될
richyeon.com
한글 폰트 하나가 13MB, 잘못 받은 게 아니라 글자 수 때문입니다
폰트를 하나 내려받았는데 파일 크기가 13MB로 찍히면 손이 멈칫하게 됩니다.글자 모양 하나 담은 파일이 사진 수십 장 분량이니 뭔가 잘못 받았나 싶어집니다. 윈도우에 이미 깔려 있는 폰트들
richyeon.com
사진 옮겼더니 찍은 날짜가 전부 오늘, 촬영일이 진짜 사라지는 지점은 따로 있습니다
여행 사진 수백 장을 폰에서 컴퓨터로 옮겨 놓고 날짜순으로 정렬했더니,몇 년에 걸쳐 찍은 사진이 전부 같은 날 찍힌 것처럼 줄을 섭니다.파일 목록에 뜬 날짜는 하나같이 오늘입니다. 먼저 안
richyeon.com
'파일 형식 백과사전' 카테고리의 다른 글
| Parquet 저장할 때 compression만 바꿨을 뿐인데 용량이 갈립니다, 코덱 3종 실측 비교 (1) | 2026.07.21 |
|---|---|
| CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 (0) | 2026.07.20 |
| 사진 용량 줄일 때 해상도를 줄일까 화질을 낮출까, 무엇이 더 효율적인지 실측 (0) | 2026.07.18 |
| ZIP 압축을 풀었더니 파일명이 ║╕░φ╝¡ 처럼 깨질 때, 원인과 해결 (1) | 2026.07.16 |
| 같은 사진을 WebP, AVIF, JPG로 저장하면 용량이 얼마나 차이 날까 (직접 측정 후기) (0) | 2026.07.15 |