파이썬 판다스 중복 행 제거 함수 : 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 인자도 지원하고 있습니다.
'Python > Pandas' 카테고리의 다른 글
[Pandas] 데이터프레임 생략 없이 출력 방법(display 옵션) (1) | 2022.02.14 |
---|---|
[Pandas] 데이터프레임 열 타입 확인 : df.info(), df.dtypes (0) | 2022.01.11 |
[Pandas] 파이썬 csv, tsv 파일 읽기, 내보내기 : read_csv, to_csv (0) | 2022.01.11 |