중복 제거
중복 데이터(duplicates)란 데이터셋에서 완전히 동일한 행이 반복되는 경우나, 특정 기준으로 볼 때 중복인 데이터 포인트를 말합니다.중복 데이터는 분석 결과를 왜곡시킬 수 있으므로, 적절히 제거하거나 처리해야 합니다.
판다스에서는 중복을 다루기 위한 메서드로 duplicated()와 drop_duplicates()를 제공합니다.
- duplicated()
- 각 행이 이전에 나타난 적이 있는지 여부를 True/False로 표시한 불리언 Series를 반환합니다.
- 기본으로 첫 번째 등장만 False (중복 아님)이고, 그 이후 중복들은 True로 표시됩니다.
- (duplicated(keep='first')가 기본 동작.
- 반대로 'last'로 하면 마지막만 남기고 처음들을 True로 표시, False로 하면 모든 중복을 True 표시).
- drop_duplicates()
- 중복 행을 제거합니다.
- 기본적으로 처음 등장한 행은 남기고 이후 중복은 제거하며 (keep='first'),
- 인덱스는 기존 순서를 유지합니다 (인덱스가 재정렬되진 않음).
- 원본을 변경하려면 inplace=True를 쓰거나, 결과를 새로운 데이터프레임으로 받아야 합니다.
예제: 간단한 데이터프레임을 만들어 중복 제거 실습을 해보자
df_dup = pd.DataFrame({'A': [1, 1, 2, 3], 'B': [5, 5, 6, 7]})
print(df_dup)
print("Duplicates:\n", df_dup.duplicated())
A B
0 1 5
1 1 5
2 2 6
3 3 7
Duplicates:
0 False
1 True
2 False
3 False
dtype: bool
위 데이터프레임 df_dup에서 (A=1, B=5) 조합이 0번과 1번 행에 중복으로 존재합니다. df_dup.duplicated() 결과를 보면 0번은 False(처음이므로), 1번은 True(이전에 같은 내용이 있으므로), 2번과 3번은 각각 고유하므로 False로 나타났습니다.
- 이때 df_dup.drop_duplicates()를 적용하면 중복된 1번 행이 제거됩니다:
print(df_dup.drop_duplicates())
A B
0 1 5
2 2 6
3 3 7
- 출력 결과를 보면 인덱스 1 행이 제거되어, 남은 행은 0, 2, 3번 (총 3개)입니다.
- drop_duplicates는 기본적으로 모든 컬럼 값이 다 같은 행을 중복으로 판정합니다.
- 특정 열 기준 중복 제거
- 가령 여러 열 중 특정 열만 보고 중복 판단을 할 수도 있습니다.
- df.drop_duplicates(subset=['컬럼명'])으로 지정하면 해당 컬럼값이 같은 행들 중 중복을 제거합니다.
- 예를 들어 subset=['A']로 하면 A열 값이 같은 행은 하나만 남기고 제거합니다.
- keep 옵션
- keep='first'|'last'|False 옵션으로 중복 데이터 중 어느 것을 남길지 결0정합니다.
- 기본 'first'는 처음 발견을 남김, 'last'는 마지막 발견을 남김, False는 중복된 것 전부 제거해버립니다 (이 경우 중복 그룹의 데이터가 아예 없어짐).
🔍 GPT 검색



실제 데이터 적용 예시
고객 주문 데이터에서 동일 고객의 동일한 주문이 중복 기록되어 있을 경우, drop_duplicates를 사용해 정리할 수 있습니다.
예를 들어 Superstore 데이터에 혹시 중복된 Order ID와 Product ID 조합이 있다면 제거하면 좋을 것입니다:
orders = orders.drop_duplicates(subset=['Order ID','Product ID'])
이렇게 하면 동일 주문의 동일 상품에 대한 중복 행이 제거되어, 잘못 이중 기재된 주문내역을 정리할 수 있습니다.
❗주의
- 중복 제거를 할 때는 어떤 기준으로 중복을 판단할지 도메인에 맞게 결정해야 합니다.
- 단순히 모든 컬럼이 동일한 행이 중복일 수도 있고, 중요 키 컬럼들만 같으면 중복으로 볼 수도 있습니다.
- 또한, 중복으로 의심되는 행들이 완전히 같지 않고 일부 값만 다를 때는 어떤 것을 믿어야 할지도 고려해야 합니다.
'데이터 전처리 & 시각화' 카테고리의 다른 글
| [전처리/시각화] 개인과제 문제7번 : 부모 학력 수준별 고득점 비율(%) 계산 & 단일 막대 그래프로 나타내기 (0) | 2025.09.02 |
|---|---|
| [데이터 전처리] 결측치 처리 (Missing Data) (0) | 2025.08.28 |
| [데이터 전처리] 데이터 정렬(sorting) 및 정제(cleaning) (1) | 2025.08.28 |