Parquet라는 이름을 처음 보면 전용 변환 프로그램이나 빅데이터 도구를 따로 깔아야 한다고 짐작하기 쉽습니다. 그래서 변환 자체를 어렵게 느끼고 미뤄 두는 경우가 많습니다.
실제로는 파이썬의 pandas 라이브러리만 있으면 됩니다. CSV를 읽어 한 줄로 Parquet로 저장하면 끝이고, 별도 변환기는 필요 없습니다. 아래 단계를 그대로 따라 하면 한글이 섞인 CSV도 데이터 손실 없이 변환됩니다.
준비물부터 짧게
변환에 쓰는 라이브러리는 두 개입니다. 표를 다루는 pandas, 그리고 Parquet 파일을 실제로 쓰고 읽는 엔진인 pyarrow입니다. 둘 다 한 번만 설치하면 됩니다.
pip install pandas pyarrow
이 글의 모든 수치는 윈도우 11, 파이썬 3.14.3, pandas 3.0.1, pyarrow 24.0.0 환경에서 실제로 변환해 얻은 값입니다. 버전이 다르면 압축 결과 크기는 조금 달라질 수 있습니다.
1단계. CSV를 읽어 Parquet로 저장하기
핵심은 두 줄입니다. read_csv로 CSV를 표로 불러오고, to_parquet로 내보냅니다. 엔진은 pyarrow를 지정합니다.
import pandas as pd
df = pd.read_csv("sample.csv")
df.to_parquet("sample.parquet", engine="pyarrow")
이게 변환의 전부입니다. 실행하면 같은 폴더에 sample.parquet 파일이 생깁니다. 압축 옵션을 따로 적지 않으면 pyarrow는 기본으로 snappy 방식으로 압축합니다.
2단계. 변환 전후 용량 비교하기
같은 데이터가 형식만 바꿔도 얼마나 작아지는지 직접 쟀습니다. 한글 이름과 도시가 들어간 2,000행 표(컬럼 5개: id, name, age, city, amount)를 만들어 CSV로 저장한 뒤, 압축 방식을 바꿔 Parquet로 세 번 변환했습니다.
| 파일 | 용량 | CSV 대비 |
|---|---|---|
| 원본 CSV | 64,675 byte | 1.00배 |
| Parquet (압축 없음) | 44,665 byte | 0.69배 |
| Parquet (snappy, 기본) | 27,829 byte | 0.43배 |
| Parquet (gzip) | 18,357 byte | 0.28배 |
압축을 끄더라도 Parquet가 CSV보다 작았고, 기본 snappy로는 절반 아래, gzip으로는 약 4분의 1까지 줄었습니다. 다만 줄어드는 비율은 데이터 내용에 따라 달라집니다. 값이 반복되거나 규칙적일수록 많이 줄고, 무작위에 가까운 값이 많으면 덜 줄어듭니다.
3단계. 압축 방식 바꿔 보기
용량을 더 줄이고 싶으면 compression 옵션만 바꾸면 됩니다. 위 표의 gzip 결과는 아래처럼 저장한 것입니다.
df.to_parquet("sample.gzip.parquet", engine="pyarrow", compression="gzip")
df.to_parquet("sample.snappy.parquet", engine="pyarrow", compression="snappy")
snappy는 압축을 풀고 읽는 속도가 빨라 기본값으로 쓰이고, gzip은 크기를 더 줄이는 대신 쓰고 읽는 데 시간이 조금 더 듭니다. 저장 공간이 급하면 gzip, 자주 읽어야 하면 snappy 쪽이 무난합니다.
4단계. 데이터가 그대로인지 다시 읽어 확인하기
변환 후에는 꼭 되읽어 검증하는 습관이 좋습니다. read_parquet로 다시 불러 행 수, 컬럼, 첫 행 값을 확인했습니다.
back = pd.read_parquet("sample.snappy.parquet", engine="pyarrow")
print("rows:", len(back))
print("cols:", list(back.columns))
print("row 0:", back.iloc[0].to_dict())
실제 출력은 이렇게 나왔습니다.
rows: 2000
cols: ['id', 'name', 'age', 'city', 'amount']
row 0: {'id': 1, 'name': '김민수', 'age': 19, 'city': '서울', 'amount': 0.0}
2,000행과 컬럼 5개가 그대로 살아 있고, 한글 이름과 도시도 깨지지 않았습니다. 원본과 되읽은 표가 완전히 같은지 비교하는 df.equals(back)도 True를 돌려주었습니다.
덤으로 확인한 점: 자료형이 보존됩니다
CSV는 모든 값을 글자로만 저장해서, 다시 읽을 때 숫자인지 글자인지 매번 추측합니다. Parquet는 컬럼마다 자료형(dtype)을 파일 안에 같이 적어 둡니다. 변환 전후 자료형을 출력해 비교했더니 그대로였습니다.
id int64
name str
age int64
city str
amount float64
id와 age는 정수, amount는 실수, name과 city는 문자열로 양쪽에서 동일하게 나왔습니다. 덕분에 Parquet는 다시 읽을 때 자료형을 다시 알아맞힐 필요가 없습니다. 큰 표일수록 이 점이 읽기 속도와 안정성에서 유리합니다.
자주 묻는 질문
Q. 한글이 섞여 있어도 안전한가요?
네. 위 실측처럼 한글 이름과 도시가 그대로 보존됐습니다. Parquet는 문자열을 UTF-8로 저장하므로 인코딩을 따로 신경 쓰지 않아도 됩니다.
Q. 변환한 Parquet를 엑셀에서 바로 열 수 있나요?
엑셀은 기본적으로 Parquet를 직접 열지 못합니다. 엑셀로 봐야 한다면 read_parquet로 읽어 다시 to_csv로 내보내면 됩니다.
Q. CSV 원본은 지워도 되나요?
4단계처럼 되읽어 행 수와 값이 맞는지 확인한 뒤라면 보관 부담을 줄이려 지워도 무방합니다. 다만 다른 사람과 주고받을 일이 잦다면 호환성이 넓은 CSV를 함께 두는 편이 편합니다.
지금 손에 있는 CSV 하나를 골라 read_csv와 to_parquet 두 줄로 변환하고, read_parquet로 되읽어 행 수만 맞춰 보세요. 변환이 생각보다 간단하다는 걸 한 번 확인해 두면 다음부터는 망설일 일이 없습니다.
'파일 형식 백과사전' 카테고리의 다른 글
| 받은 JSON을 엑셀로 봐야 할 때, XLSX로 변환하는 가장 깔끔한 방법 (0) | 2026.07.06 |
|---|---|
| JSON "Expecting property name", "Expecting ',' delimiter" 오류, 증상별로 원인 찾고 고치기 (0) | 2026.07.05 |
| 같은 데이터를 CSV와 Parquet로 저장하면 용량과 읽기 속도가 얼마나 차이 날까 (0) | 2026.07.03 |
| CSV를 UTF-8로 저장하는 법, 엑셀과 메모장과 파이썬에서 각각 (0) | 2026.07.02 |
| JSON 한 줄 저장과 들여쓰기 저장, 용량이 얼마나 차이 날까 (실측과 정리 방법) (0) | 2026.06.30 |