Excel 은 CSV 다음으로 세상에서 제일 많이 오가는 데이터 포맷이야. 그리고 그걸 만지는 비용은 어김없이 세 군데서 청구돼: 타입 혼동, 숨은 state, round-trip drift.
타입 혼동
Excel 은 파일을 열 때, 그리고 paste 할 때 type 을 auto-detect 해. 한번 detect 되면 type 이 cell 에 저장돼 — 그러니까 CSV 를 Excel 로 열었다가 다시 저장하는 것만으로 값이 영구히 바뀔 수 있어. 단골 범인들:
- 앞자리 0 증발 (
00123ZIP →123). - 긴 ID 가 과학 표기로 (
1234567890123456→1.23457E+15, 마지막 자리 손실). - 유전자 이름이 날짜로 (
MARCH1→1-Mar). - 분수처럼 생긴 string 이 진짜 분수로 (
1/2→0.5).
숨은 state
Excel 파일은 셀 값만 담은 게 아니야. 수식, 조건부 서식, 명명된 범위, 숨은 column, autofilter, 댓글, 변경 추적, 임베드 객체, 매크로까지. openpyxl 이나 pandas 로 XLSX 를 읽으면 그 대부분을 그냥 지나쳐 — 그래도 되긴 하는데, 본인이 읽은 파일과 사람이 화면에서 보는 파일이 다른 물건이라는 뜻이야.
Round-trip drift
편집 한 번 없이 같은 파일을 읽고 쓰기만 해도 수식 평가 순서, locale 별 구분자, float 표현이 잔 diff 를 만들어 — git commit 이 지저분해지고, downstream consumer 가 걸려 넘어져.
규칙: Excel 은 파이프라인의 경계에서만 (사람이 건네줄 때만) 읽고, 즉시 Parquet 으로 변환해. Excel 을 파이프라인의 stage 로 만들지 마 — 입구 아니면 출구로만.