Python으로 CSV 결합을 검증: 합계가 같아도 오류 3건
요약
CSV 데이터 결합 시 합계가 일치하더라도, 명세별 일치 건수와 누락된 데이터를 검증하는 방법을 제시합니다. 특히 `checked_join`과 같은 로직을 사용하여 ID 기반의 정확한 매칭 여부를 확인하고, 단순 합계 비교만으로는 놓칠 수 있는 데이터 오류를 잡아낼 수 있습니다.
핵심 포인트
- 단순 합계 대조보다 명세별 일치 건수 검증이 중요합니다.
- ID가 일치하는 조합을 모두 남기면 누락된 데이터나 증감액 상쇄 오류가 발생할 수 있습니다.
- `checked_join`과 같은 로직으로 1:1 매칭 여부를 조사하여 정확한 데이터를 확보하세요.
- Python의 `csv.DictReader`와 `Counter`를 활용해 효율적으로 데이터 구조를 분석할 수 있습니다.
「CSV를 결합했으니, 합계를 대조한다」. 저 역시 가장 먼저 그 부분을 확인하지만, 명세별 일치 건수도 확인하고 싶습니다.
오늘 가상의 매출 3행을 고객 마스터와 연결했더니, 4만 원 그대로 4행이 되었습니다. 합계가 맞는 것은 기분 나쁘네요.
매출은 C001의 1만 원이 2행, C002의 2만 원이 1행입니다. 마스터에는 C001이 2행 있고, C002는 미등록입니다. ID가 일치하는 조합을 모두 남기면, C001의 매출은 각각 2번 남아 총 4만 원이 됩니다. C002의 2만 원은 사라지고, 증감액이 상쇄되었습니다.
담당자 이름을 붙였다는 것만으로도, 매출 내용까지 바뀌어 있습니다.
checked_join
을 사용해서, 매출 1행당 마스터가 1행 일치하는지 조사합니다. 0건도 2건도 막고, 대상 명세를 남깁니다. 여기, 은근히 효과적입니다.
Python 3.14.8로 실행했습니다. 추가 패키지는 필요 없습니다. check_join.py에 저장하고, python3 check_join.py로 실행합니다. 에러를 표시하고 종료합니다.
import csv
from collections import Counter
from io import StringIO
...
원본 데이터: 3행 / 40000엔
단순 결합: 4행 / 40000엔
일치 건수 확인: {'S01': 2, 'S02': 2, 'S03': 0}
이중 루프는 INNER JOIN의 재현용입니다. Counter로 마스터의 ID별 행 수를 세어보면, S01과 S02는 2건, S03은 0건입니다. 오류가 있는 명세는 3건입니다.
검사 후에 딕셔너리에서 이름을 추출합니다. 먼저 딕셔너리로 변환하면 중복 ID의 이름이 덮어쓰여집니다.
손안의 CSV는 csv.DictReader로 읽어 들인 리스트로 바꿉니다. UTF-8이라면 `encoding=
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기