Python DataFrame 중복 제거 drop_duplicates 사용 방법

DataFrame에서 중복한 행(레코드)를 삭제하는 방법에 대해 알아보겠습니다.

중복한 행을 삭제하는 방법으로 drop_duplicates 함수를 사용합니다.

drop_duplicates 함수를 사용해 DataFrame에서 중복하는 행을 삭제하는 샘플을 보면서 사용 방법을 알아보겠습니다.

우선 샘플 데이터를 만들겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
print(df)

#       name  age state  point
# 0   AliceR   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
print(df)

#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
# 6     Dave   68    TX     70

 

우선 샘플데이터로 DataFrame을 작성하고 마지막 행에 중복된 값을 추가했습니다.

인덱스 3번째와 6번째는 중복 데이터 입니다.

drop_duplicates 사용해 DataFrame에서 중복하는 데이터를 삭제 하겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
# 마지막행 중복 데이터 추가
df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
                
# 중복데이터 삭제후 출력
print(df.drop_duplicates())

#       name  age state  point
# 0   AliceR   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

 

중복되는 마지막행이 삭제되고 출력되었습니다.

drop_duplicates함수에 파라미터를 설정해 사용할 수 있습니다.

설정할 수 있는 파라미터 옵션으로 keep과 subset이 있습니다.

keep 옵션 사용 방법을 보겠습니다.

keep 옵션은 중복하는 값중 어떤행을 표시 할것인지 제어할 수 있습니다.

기본값을 ‘first’입니다.

keep 옵션을 생략하는 경우에는 기본값인 ‘first’가 적용되 중복된 행중 첫 번째 행이 출력이 됩니다.

keep 옵션에 ‘last’를 설정해보겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
# 마지막행 중복 데이터 추가
df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
                
# 중복데이터 삭제후 출력
print(df.drop_duplicates(keep='last'))

 

결과

      name  age state  point
0   AliceR   24    NY     64
1      Bob   42    CA     92
2  Charlie   18    CA     70
4    Ellen   24    CA     88
5    Frank   30    NY     57
6     Dave   68    TX     70

 

keep 옵션에 ‘last’를 설정해 출력된 결과에는 중복된 값중 인덱스 3이 표시되지 않았습니다.

중복된 값중 마지막 행인 인덱스 6이 표시되었습니다.

keep 옵션에는 False를 설정 할 수도 있습니다.

False를 설정한 경우에는 중복되는 모든 값이 출력되지 않습니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
# 마지막행 중복 데이터 추가
df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
                
# 중복데이터 모두 삭제후 출력
print(df.drop_duplicates(keep=False))

 

결과

     name  age state  point
0   AliceR   24    NY     64
1      Bob   42    CA     92
2  Charlie   18    CA     70
4    Ellen   24    CA     88
5    Frank   30    NY     57

 

keep 옵션에 False를 설정하고 출력한 결과를 보면 중복하는 행이 모두 삭제되고 출력되었습니다.

이번에는 subset 옵션에 대해 알아보겠습니다.

파라미터에 subset 옵션을 지정할 수 있습니다.

subset 옵션은 중복하는 값이 존재하는 열을 지정할 수 있습니다.

subset에 지정한 열에 중복된 값이 있는 행을 삭제합니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
# 마지막행 중복 데이터 추가
df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
                
# state 컬럼에 중복데이터 삭제후 출력
print(df.drop_duplicates(subset='state'))

 

결과

     name  age state  point
0  AliceR   24    NY     64
1     Bob   42    CA     92
3    Dave   68    TX     70

 

출력된 결과를 보면 state 열에서 중복된 값이 있는 행은 삭제되고 출력되었습니다.

열을 여러개 지정할 수 있습니다.

import pandas as pd

df = pd.DataFrame({'name': ['AliceR', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank'],
                   'age': [24, 42, 18, 68, 24, 30],
                   'state': ['NY', 'CA', 'CA', 'TX', 'CA', 'NY'],
                   'point': [64, 92, 70, 70, 88, 57]})
                   
# 마지막행 중복 데이터 추가
df = df.append({'name': 'Dave',
                'age': 68,
                'state': 'TX',
                'point': 70},
                ignore_index=True)
                
# state와 point 컬럼에 중복데이터 삭제후 출력
print(df.drop_duplicates(subset=['state', 'point']))

 

결과

      name  age state  point
0   AliceR   24    NY     64
1      Bob   42    CA     92
2  Charlie   18    CA     70
3     Dave   68    TX     70
4    Ellen   24    CA     88
5    Frank   30    NY     57

 

결과를 보면 subset에 지정한 state와 point 열 두 개의 값이 모두 일치하는 행을 삭제하고 표시하고 있습니다.

여러개 열을 지정한 경우에는 지정한 열의 모든 값이 일치하는 경우에만 삭제를 합니다. 

댓글