본문 바로가기
Python

[python] pandas dataframe 중복데이터 찾기, 제거하기 (duplicated / drop_duplicates)

by clolee 2021. 10. 21.

우선 예제로 쓸 데이터프레임을 하나 생성한다.

import pandas as pd

df = pd.DataFrame({'ID' : ['c_01', 'c_02', 'c_03', 'c_04', 'c_05', 'c_06'],
                   'Type' : ['a', 'a', 'a', 'b', 'b', 'c'],
                   'Rank' : [1, 1, 2, 2, 2, 3]})
df

 

 

 

DataFrame.duplicated(subset=None, keep='first')

 

중복 행 확인하기

subset은 중복을 확인할 열을 [리스트 형태]로 입력한다. default는 모든 열에 대해 중복을 확인한다.

keep은 first, last, False 중 선택한다. default는 first.

keep='first' 이면 중복 행 중 첫번째 행만 False, 나머지 행은 True.

keep='last' 이면 중복 행 중 마지막 행만 False, 나머지 행은 False.

keep=False 이면 중복 행 모두 True를 반환.

 

 

위에서 만든 데이터프레임을 Rank열의 값을 기준으로 중복여부를 확인해 본다.  keep='first'

dup = df.duplicated(['Rank'], keep='first')
dup

 

중복여부 column을 기존 데이터프레임에 열 추가를 통해 비교하기 쉽게 확인해보자.

 

dup 에서 keep='first' 이므로 인덱스 기준 Rank가 1로 중복되는 0행, 1행 중 첫번째인 0행의 Dup값이 False로 되고 1행은 True가 된다.

마찬가지로 Rank가 2로 중복되는 2행, 3행, 4행 중  첫번째인 2행의 Dup 값이 False, 나머지 3행, 4행의 Dup값은 True가 된다.

5행의 경우 Rank를 기준으로 중복되는 행이 없으므로 Dup 값이 False 이다.

df_dup = pd.concat([df, dup], axis=1)
df_dup.rename(columns = {0 : 'Dup'}, inplace = True)
df_dup

Dataframe column 명 변경 참고 :

2021.10.21 - [python] - [python] Dataframe column 명 변경, column 순서 변경

 

 

keep='last' 일 때 결과

중복 행들 간에서 마지막 행들이 False를 반환하고 나머지 위의 행들은 True를 반환한다.

dup2 = df.duplicated(['Rank'], keep='last')
df_dup2 = pd.concat([df, dup2], axis=1)
df_dup2.rename(columns = {0 : 'Dup'}, inplace = True)
df_dup2

 

 

keep=False 일 때 결과

중복 행들 모두 True를 반환한다. 중복 행이 존재하지 않는 행만 False를 반환한다.

dup3 = df.duplicated(['Rank'], keep=False)
df_dup3 = pd.concat([df, dup3], axis=1)
df_dup3.rename(columns = {0 : 'Dup'}, inplace = True)
df_dup3

 

 

중복 열 2개를 기준으로 중복 행 확인하기

dup4 = df.duplicated(['Type', 'Rank'], keep='first')
df_dup4 = pd.concat([df, dup4], axis=1)
df_dup4.rename(columns = {0 : 'Dup'}, inplace = True)
df_dup4

 

 

 

 

 

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

 

중복 행 제거하기

subset은 중복 행 제거를 위해 중복을 확인할 열을 [리스트 형태]로 입력한다. default는 모든 열에 대해 중복을 확인해 제거한다.

keep은 first, last, False 중 선택한다. default는 first.

keep='first' 이면 중복 행 중 첫번째 행만 남기고, 나머지 행은 모두 제거.

keep='last' 이면 중복 행 중 마지막 행만 남기고, 나머지 행은 모두 제거.

keep=False 이면 중복 행 모두 제거.

 

 

기본 데이터프레임

 

keep='first' 일 때 duplicated 반환 값 열 추가

 

 

데이터프레임에 drop_duplicates를 적용하면 duplicated의 결과가 False인 행만 남고 True인 행이 제거된다.

 

 

keep='first' 일 때 drop_duplicates

df.drop_duplicates(['Rank'], keep='first')

 

 

 

keep='last' 일 때 duplicated 반환 값 열 추가

 

keep='last' 일 때 drop_duplicates

df.drop_duplicates(['Rank'], keep='last')

 

 

 

keep=False 일 때 duplicated 반환 값 열 추가

 

keep=False 일 때 drop_duplicates

df.drop_duplicates(['Rank'], keep=False)

 

 

참고 :

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.html

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html

https://sy-log.tistory.com/60

https://kongdols-room.tistory.com/124

 

 

 

 

 

 

 

댓글