두 엑셀 파일 차이 찾기: 변경된 셀과 누락 데이터 자동 비교 방법
두 엑셀 파일을 비교할 때는 먼저 무엇이 다른지를 나눠서 봐야 합니다.
- 값이 바뀐 셀
- 누락된 행/열
- 결측값(NaN)
아래 방식으로 하면 실무에서 바로 쓸 수 있는 비교 흐름을 만들 수 있습니다.
1) 엑셀 파일을 DataFrame으로 읽기
pandas.read_excel()은 Excel 파일을 DataFrame으로 읽을 수 있고, 단일 시트와 여러 시트를 다룰 수 있습니다. source
import pandas as pd
left = pd.read_excel("before.xlsx")
right = pd.read_excel("after.xlsx")
여러 시트를 다뤄야 한다면 ExcelFile 워크플로를 함께 검토할 수 있습니다. source
확인할 점
- 비교할 기준 시트가 무엇인지 먼저 정합니다.
- 행을 구분하는 키 컬럼이 있다면 그 컬럼을 인덱스로 쓰는 편이 비교가 쉽습니다.
2) 비교 전에 레이블과 shape 맞추기
예를 들어 키 컬럼이 id라면 다음처럼 맞출 수 있습니다.
left = left.set_index("id").sort_index()
right = right.set_index("id").sort_index()
# 컬럼 순서도 맞추기
right = right[left.columns]
이 단계에서 확인할 것은:
- 한쪽에만 있는 행이 있는지
- 한쪽에만 있는 열이 있는지
- 같은 항목인데 순서만 다른지
3) 먼저 완전 일치 여부 빠르게 확인하기
DataFrame.equals()는 두 DataFrame이 같은지 여부를 boolean으로 반환하는 빠른 동일성 검사입니다. 사람에게 보여줄 diff 결과는 제공하지 않습니다. source
if left.equals(right):
print("두 파일은 동일합니다.")
이건 “같다/다르다”를 먼저 빠르게 확인할 때 좋습니다.
4) 변경된 셀만 추출하기
DataFrame.compare()는 동일한 레이블과 shape를 가진 두 DataFrame의 차이를 셀 단위로 보여줍니다. source
diff = left.compare(right)
print(diff)
5) 누락 행/열과 결측값을 분리해서 보기
즉, 아래처럼 나눠서 봐야 합니다.
- 누락 행/열: 한쪽 파일에 아예 없는 항목
- 결측값(NaN): 양쪽에 항목은 있지만 값이 비어 있음
이 구분이 없으면, “데이터가 빠졌다”는 표현이 너무 넓어져서 원인 분석이 어려워집니다.
6) 결과를 CSV로 저장하기
DataFrame.to_csv()는 CSV 내보내기를 지원하며, index는 기본값이 True이므로 원하지 않으면 index=False를 명시해야 합니다. source
diff.to_csv("diff_report.csv", encoding="utf-8", index=False)
비교 결과를 외부 검토자나 비개발자와 공유할 때 유용합니다. source
7) 추천 워크플로
1. 두 Excel 파일을 read_excel()로 읽습니다.
2. 비교 기준이 되는 키 컬럼을 정하고 행·열 구조를 맞춥니다.
3. equals()로 완전 일치 여부를 먼저 확인합니다.
4. 차이가 있다면 compare()로 변경된 셀을 확인합니다.
5. 누락 행/열과 결측값(NaN)은 별도로 구분해 확인합니다.
6. 필요한 경우 비교 결과를 CSV로 저장합니다.
8) 간단한 실전 예시
아래는 “ID를 기준으로 두 파일을 비교한다”는 전형적인 예시입니다.
import pandas as pd
before = pd.read_excel("before.xlsx").set_index("id").sort_index()
after = pd.read_excel("after.xlsx").set_index("id").sort_index()
# 공통 컬럼만 맞추기
common_cols = before.columns.intersection(after.columns)
before = before[common_cols]
after = after[common_cols]