Python 데이터 파이프라인에서 Excel 파일을 읽는 작업은 생각보다 병목이 되기 쉽습니다. 특히 수십만~수백만 셀 규모의 .xlsx 파일을 처리할 때는 엔진 선택이 성능을 크게 좌우합니다.
pandas 2.2+부터 calamine 엔진이 추가되면서, 기존의 openpyxl 엔진과 비교해 속도 중심 vs 호환성 중심의 선택지가 생겼습니다.
이 글에서는 다음을 정리합니다.
calaminevsopenpyxl의 구조적 차이- 보고된 성능 차이
- 실제 장단점
- pandas vs polars 비교
Excel Reader Engine 구조
Excel을 읽는 과정은 크게 다음 단계로 구성됩니다.
1
2
3
4
5
6
7
8
9
10
11
Excel file (.xlsx)
│
▼
[Excel parsing engine]
- openpyxl
- calamine
│
▼
DataFrame 생성
- pandas
- polars
openpyxl vs calamine 구조적 차이
openpyxl
특징
- Python으로 구현된 Excel 파서
- Workbook / Worksheet / Cell 객체 모델 기반
동작 방식
1
2
3
4
5
6
7
8
9
Excel file
↓
zip 해제
↓
xml parsing
↓
Cell 객체 생성
↓
Python loop로 DataFrame 변환
문제점
- 셀 단위 Python 객체 생성
- Python iteration overhead
- 대규모 Excel에서 성능 저하
- 지원 포맷
- xlsx
- xlsm
강점
- Excel 기능 호환성: 스타일, 수식, 서식 처리
- 안정성
- 디버깅: 에러 메시지가 명확함
calamine
특징
- Rust 기반 Excel 파서
- Python binding (
python-calamine,fastexcel)
동작 방식
1
2
3
4
5
6
7
Excel file
↓
Rust parser
↓
columnar data extraction
↓
DataFrame 생성
강점
- parsing loop가 Rust에서 실행
- Python object 생성 최소화
- 메모리 사용량 감소
- 다양한 포맷 지원:
xls, xlsx, xlsm, xlsb, ods
약점
- 타입 추론 차이: datetime 타입 차이, timedelta 표현 차이, mixed type 컬럼 추론 차이
- Excel 기능 지원 한계: 수식 처리, 병합 셀 처리 같은 기능은 openpyxl이 더 안정적
실제 보고된 성능 차이
pandas 2.2 릴리즈 노트에서는 다음과 같은 내용이 명시되어 있습니다.
calamine은 여러 벤치마크에서 openpyxl 대비 최대 약 5배 빠른 사례 존재- 특히 대형 Excel 전체 로딩에서 성능 차이가 큼
하지만 예외도 있습니다.
- 대형 Excel에서 상위 몇 행만 읽는 경우
openpyxl또는pyxlsb가 더 빠를 수 있음
이는 openpyxl의 lazy iteration 특성 때문입니다.
결론
Excel을 빠르게 읽고 싶다면 calamine, Excel을 정확하게 해석하고 싶다면 openpyxl.