Python/Pandas

[Pandas] 파이썬 데이터프레임 중복 제거 : drop_duplicates() 사용법

jimmy_AI 2022. 1. 17. 15:58
반응형

파이썬 판다스 중복 행 제거 함수 : drop_duplicates()

이번 글에서는 판다스에서 중복된 행을 쉽게 제거할 수 있는

drop_duplicates 함수의 사용법에 대해서 살펴보겠습니다.

 

이 글은 판다스 공식 문서의 해당 함수에 대한 글을 기반으로 작성되었습니다.

 

우선, 다음과 같은 간단한 데이터프레임 있다고 가정해보겠습니다.

import pandas as pd

a = {'A' : [111, 111, 111, 111, 222, 222], 'B' : ['aaa', 'aaa', 'bbb', 'bbb', 'aaa', 'bbb'], 
'C' : ['zzz', 'zzz', 'zzz', 'yyy', 'zzz', 'yyy']}
df = pd.DataFrame(a)
df

0, 1번 행은 완전히 동일하며, 일부 column 값이 겹치는 행들이 나타나고 있습니다.

 

 

drop_duplicates 기본 사용법

drop_duplicates 함수는 기본으로 설정 시, 모든 행이 전부 일치하는 행들을 대상으로

삭제를 진행하게 됩니다.

df.drop_duplicates()

위의 6개 행 중에서 A, B, C 열이 모두 동일한 0번과 1번 행 중 뒤인 1번 행이 삭제되었습니다.

 

나머지 행들은 다른 행들과 1가지 열의 값이라도 불일치하여 그대로 남겨졌습니다.

반응형

일부 column만 중복되는 경우도 제거 : subset 인자

모든 열의 값이 완전히 일치하는 경우가 아니라, 일부 열의 값만 중복되는 경우

삭제하고 싶다면 subset 인자에 중복을 탐지할 열의 목록을 지정해주시면 됩니다.

 

subset = ['A'] 식으로 지정하거나 혹은 아예 첫 번째 인자로 지정하는 것도 가능합니다.

df.drop_duplicates(['A'])
# df.drop_duplicates(subset = ['A'])와 동일

A열 값을 기준으로 111, 222 값의 첫 번째 행들만 생존하였습니다.

 

이번에는 subset 인자의 input으로 2개의 행을 지정해보도록 하겠습니다.

df.drop_duplicates(['A', 'B'])

A, B열의 값을 기준으로 111-aaa 조합과 111-bbb 조합에서 겹치는 행들이 등장하므로,

해당 두 조합에 대해서 첫 번째 열만 살아남게 된 결과가 나타났습니다.

 

 

중복을 제거하고 남길 행의 위치 지정 : keep 인자

중복을 제거할 경우, 기본적으로 중복되는 행의 위치들 중 첫 번째 행을 남기는 것

기준으로 삼아 결과를 반환하게 됩니다.

 

keep인자로 마지막 위치만 남기거나 혹은 중복된 행들을 전부 지워버리는 것이 가능합니다.

 

마지막 위치만 남기는 경우는 keep 인자를 'last'로 지정해주시면 됩니다.

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

A, B열에서 중복되는 111-aaa와 111-bbb 조합들의 가장 마지막 위치가 남았습니다.

즉, 0, 1번 중에서 0번 대신 1번 행이 살아남고, 2, 3번 행 중에서는 3번이 생존했습니다.

 

중복된 행을 전부 지우는 경우에는 keep 인자를 False로 지정해주시면 됩니다.

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

A, B열에서 111-aaa, 111-bbb 조합을 가지는 행들이 전부 삭제되었습니다.

 

이 외에도 함수 실행 시 df의 결과를 직접 변경하는 방식을 지정하는 inplace 인자,

index를 초기화할지 여부를 결정하는 ignore_index 인자도 지원하고 있습니다.