[python] 파이썬: pandas 중복 값 제거


pandas 중복 값 제거


pandas.DataFrame.drop_duplicates


drop_duplicates는 중복된 값을 제거한 뒤 DataFrame을 반환합니다.

subset: 중복제거할 column을 결정합니다.
  • DataFrame의 column 혹은 [column, column]으로 명시하면 명시된 column을 기준으로 중복제거가 일어납니다.
  • subset을 명시하지 않으면 전체 데이터 셋을 기준으로 중복제거를 합니다.
keep: 중복된 값을 어떻게 처리할지 정합니다.
  • first: 첫 번째 중복 값을 남기고, 이외 중복 값을 모두 제거합니다.
  • last: 마지막 번째 중복 값을 남기고, 이외 중복 값을 모두 제거합니다.
  • False: 중복된 값들을 모두 제거합니다.
inplace: boolean 값으로써
  • True면 원본 DataFrame 자체에서 중복제거를 합니다. 반환 값은 None
  • False면 원본 DataFrame을 건들지 않고 중복제거한 새로운 DataFrame을 만들어 값을 반환합니다.


import pandas as pd

data = {
    "Name": ["A", "B", "C", "D", "E", "F"], 
    "Age": [25, 35, 35, 35, 15, 45], 
    "Country": ["KOR", "KOR", "KOR", "USA", "USA", "GBR"]
}
df = pd.DataFrame(datacolumns=data.keys())
print(df)
# 출력 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR

Age를 기준으로 중복 값을 제거해보겠습니다.

1. subset: Age, keep: first

Age column을 기준으로 맨 처음 중복 값을 남기고 이외 중복 값을 제거합니다.
중복되는 B, C, D 중 처음 B를 삭제하지않고 C, D 삭제.
print(df)
print(df.drop_duplicates("Age", keep="first"))
# 원본 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR # 삭제 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 4 E 15 USA # 5 F 45 GBR

2. subset: Age, keep: last

Age column을 기준으로 마지막 중복 값을 남기고 이외 중복 값을 제거합니다.
중복되는 B, C, D 중 마지막 D를 삭제하지않고 B, C 삭제.
print(df)
print(df.drop_duplicates("Age", keep="last"))
# 원본 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR # 삭제 # Name Age Country # 0 A 25 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR

3. subset: Age, keep: False

Age column을 기준으로 중복되는 모든 값을 제거합니다.
중복되는 B, C, D 모두 삭제.
print(df)
print(df.drop_duplicates("Age"keep=False))
# 원본 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR # 삭제 # Name Age Country # 0 A 25 KOR # 4 E 15 USA # 5 F 45 GBR

4. subset: Age,Country, keep: last

Age, Country column을 기준으로 마지막 중복 값을 남기고 이외 중복 값을 제거합니다.
중복되는 B, C 중 마지막 C를 삭제하지않고 B 삭제.
print(df)
print(df.drop_duplicates(["Age", "Country"]keep=False))
# 원본 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR # 삭제 # Name Age Country # 0 A 25 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR

5. subset: Age,Country, keep: False

Age, Country column을 기준으로 중복되는 모든 값을 제거합니다.
중복되는 B, C 모두 삭제.
print(df)
print(df.drop_duplicates(["Age", "Country"]keep=False))
# 원본 # Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR # 삭제 # Name Age Country # 0 A 25 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR

6. subset: Age, keep: False, inplace: True or False

Age column을 기준으로 맨 처음 중복 값을 남기고 이외 중복 값을 제거합니다.
inplace가 False면 원본 df를 건들지 않고 중복제거한 새로운 DataFrame을 반환합니다.
inplace가 True면 원본 df에서 중복제거가 일어납니다. 반환 값은 None

False_df = df.drop_duplicates("Age", keep="first", inplace=False)
print("False df: ", df)
print("False inplace: ", False_df)

True_df = df.drop_duplicates("Age", keep="first", inplace=True)
print("True df: ", df)
print("True inplace: ", True_df)

# False df
# Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 2 C 35 KOR # 3 D 35 USA # 4 E 15 USA # 5 F 45 GBR

# False inplace
# Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 4 E 15 USA # 5 F 45 GBR

# True df
# Name Age Country # 0 A 25 KOR # 1 B 35 KOR # 4 E 15 USA # 5 F 45 GBR

# True inplace
# None


참고문헌

[1] https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html



댓글

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)

[python] selenium close와 quit 차이점