CSV 도우미English

빈 주문번호가 있는 CSV, 중복 제거 전에 확인할 것

주문번호가 같다고 같은 주문 행인 것은 아닙니다. 주문 하나에 여러 품목이 있을 수 있고, 주문번호가 빈 두 행은 서로 다른 기록일 수 있습니다. 중복 제거 뒤 합계가 줄었다면 삭제 개수만 보지 말고 어떤 행이 제외됐는지 확인하세요.

원인: 빈 값도 비교 기준에 들어갈 수 있습니다

주문번호 한 열만 기준으로 삼으면, 다른 열의 품목이나 금액이 달라도 같은 주문번호끼리 묶입니다. 선택한 키가 빈 문자열인 행들도 같은 키로 비교될 수 있습니다. 빈 주문번호가 ‘주문이 없다’거나 ‘서로 같은 주문’이라는 뜻은 아닙니다.

Microsoft의 중복 제거 안내도 비교할 열을 선택하고 삭제 전에 원본을 복사하도록 권합니다. 비교 기준과 실제 중복 여부를 먼저 검토하세요. 아래 결과는 CSV 원문과 도우미의 동작을 검증한 것이며 Excel의 셀 유형·표시 형식에 따른 비교를 재현한 것은 아닙니다. Microsoft 공식 안내

재현: 주문번호가 빈 행 두 개가 있는 표

합성 주문표는 머리글과 데이터 6건으로 구성됩니다. 실제 고객 자료가 아닙니다.

order_id,line_id,amount
O1001,L01,12000
O1001,L02,3000
O1001,L01,12000
,L03,900
,L04,4000
O1002,L05,5000

이 글의 ‘데이터 4번·5번’은 머리글을 제외한 순번이며 파일의 물리적 5줄·6줄에 해당합니다. 두 행의 주문번호는 빈 문자열이지만 line_id와 금액은 다릅니다. 또한 O1001에도 L01·L02라는 다른 내역이 있습니다. 합성 예에서는 L01의 완전히 같은 행 하나만 실수로 반복됐다고 가정합니다.

해결 1: 원본을 보존하고 빈 키부터 확인

중복 제거 전에 사본을 만드세요. CSV 검사기에서 열 개수와 빈 값을 점검하고, 원문 표에서 어느 열이 비었는지 확인합니다. 빈 주문번호를 찾았다고 곧바로 삭제하거나 모두 같은 임시 번호로 채우지 마세요.

이 예제는 order_id 두 칸이 비어 있습니다. amount는 모두 정수 원 금액이며 입력 합계는 36,900원입니다. 실제 업무에서는 합계가 커 보인다는 이유로 원본을 정답이라고 확정하지 말고, 중복 유입·취소·부분 주문 등 자료의 의미를 확인해야 합니다.

해결 2: 기준 열에 따라 제외되는 행을 비교

중복 비교 도구에서 머리글 사용을 확인하고, 먼저 앞뒤 공백 무시·대소문자 무시를 끈 상태로 결과를 비교합니다. 현재 도구는 기준 열을 고르지 않으면 행 전체로 비교하며, 기준에 맞는 첫 행을 남깁니다. 최신 행이나 정확한 행을 자동 선택하는 것은 아닙니다.

비교 기준남는 데이터제외되는 데이터 순번남은 금액 합계
행 전체5건3번24,900원
order_id 한 열3건2번·3번·5번17,900원
order_id + line_id 복합키5건3번24,900원

행 전체와 복합키의 결과는 이 예제에서 같지만, 비교 기준 자체는 다릅니다.

order_id만 선택하면 정상적인 다른 품목 L02와 빈 주문번호의 L04까지 제외됩니다. 원래 6건에서 3건으로 줄었다는 사실은 정리가 잘됐다는 증거가 아닙니다. 도구의 제외 목록에서 각 행이 어느 첫 행과 비교됐는지 확인하세요. 이 예제의 order_id 기준 제외 금액 19,000원은 반복 행 12,000원뿐 아니라 다른 내역 3,000원과 4,000원을 포함합니다.

해결 3: 빈 키는 확인 전 보존하고 업무상 유일한 기준을 정하기

빈 주문번호 두 행은 원자료에서 번호를 확인할 때까지 남겨 두는 편이 안전합니다. 도구가 빈 키 행을 자동으로 분리·보호한다고 가정하면 안 됩니다. 필요한 경우 원자료에서 빈 키 행을 별도로 보존한 사본을 마련한 뒤 나머지 자료의 중복을 검토하세요.

이 예제에서는 order_id와 line_id를 함께 쓰면 의도한 반복 행 하나만 제외됩니다. 하지만 실제 파일에서도 이 두 열이 반드시 유일하다는 뜻은 아닙니다. line_id가 주문마다 다시 시작하거나 정정 이력·분할 배송이 있으면 추가 기준이 필요합니다. 빈 키를 임의의 공통 문자열로 채우는 것도 서로 다른 행을 같은 키로 만드는 문제를 해결하지 못합니다.

완전히 같은 행도 정상적인 별개 거래일 수 있습니다. 이 합성 자료에서만 ‘같은 행 하나가 중복 유입됐다’는 가정을 두었습니다. 원본의 사건·거래 의미를 확인한 뒤 제외 여부를 결정하세요.

해결 4: 건수뿐 아니라 금액과 제외 내역도 대조

내려받기 전에 입력 건수, 남긴 건수, 제외 건수, 금액 변화를 함께 봅니다. 이 예제의 행 전체 비교는 6=5+1, 금액은 36,900=24,900+12,000입니다. 이 대조는 무엇을 제외했는지 설명할 뿐, 제외가 업무상 적법하거나 올바르다는 보증은 아닙니다.

아래 Python 코드는 빈 주문번호의 위치와 원문 합계를 확인합니다. CSV를 문자열로 읽고, 이 예제의 amount만 정수로 합산합니다. 일반적인 Excel 중복 제거 구현은 아닙니다.

import csv

with open('guide-11-orders-empty-keys.csv', encoding='utf-8-sig', newline='') as f:
    rows = list(csv.DictReader(f, strict=True))

empty = [(i, r['line_id'], r['amount'])
         for i, r in enumerate(rows, 1) if r['order_id'] == '']
print(empty)
print(sum(int(r['amount']) for r in rows))

출력:

[(4, 'L03', '900'), (5, 'L04', '4000')]
36900

도구에서 확인할 수 없는 것과 한계

CSV 도우미는 원문 구조·빈 값과 선택한 열에 따른 중복 비교를 돕습니다. 실제 주문 여부, 거래 취소·환불, 유효한 최신 이력, 빈 주문번호의 원래 값은 판정하지 않습니다. 금액 합계를 자동 계산해 주는 기능도 이 설명에 포함하지 않습니다. 위 합계는 합성 원문을 별도 코드로 계산한 값입니다.

공백 무시·대소문자 무시는 비교 기준을 바꾸는 옵션이며, 남긴 원문 값을 정리하는 기능이 아닙니다. 이번 예제에는 공백·대소문자 차이를 넣지 않았습니다. 빈 문자열과 스페이스, 숫자 0, 문자열 NULL 등은 구별해야 하며 이번 결과를 다른 빈 값 표기에 일반화하지 마세요.

합성 CSV와 현재 중복 비교 라이브러리의 행 수·제외 위치·정수 합계·원본 보존을 로컬 코드로 확인했습니다. 실제 Excel의 중복 제거·셀 자료형·브라우저 화면·다운로드 동작은 실행하지 않았습니다. 파일을 바꾸는 작업은 사본에서 하고 결과 원문을 다시 확인하세요.

검토일: 2026-10-19. 공식 안내·합성 자료·본문 Python 출력·현재 CSV 라이브러리를 대조했습니다. 전문가 감수나 사람의 실제 Excel 사용 검수를 받았다고 주장하지 않습니다.

AI 보조 작성: AI로 원고와 합성 자료를 작성하고 로컬 실행으로 확인했습니다. 실제 고객 자료는 사용하지 않았습니다.

이 글의 예제 파일을 CSV 검사기에 넣어 직접 확인해 보세요.

중복 행 제거 열기 ›