[python] 파이썬: pandas 중복 값 제거
pandas 중복 값 제거
pandas.DataFrame.drop_duplicates
drop_duplicates는 중복된 값을 제거한 뒤 DataFrame을 반환합니다.
subset: 중복제거할 column을 결정합니다.
- DataFrame의 column 혹은 [column, column]으로 명시하면 명시된 column을 기준으로 중복제거가 일어납니다.
- subset을 명시하지 않으면 전체 데이터 셋을 기준으로 중복제거를 합니다.
- first: 첫 번째 중복 값을 남기고, 이외 중복 값을 모두 제거합니다.
- last: 마지막 번째 중복 값을 남기고, 이외 중복 값을 모두 제거합니다.
- False: 중복된 값들을 모두 제거합니다.
- 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(data, columns=data.keys())
print(df)
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(data, columns=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"))
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"))
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))
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))
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))
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
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
댓글
댓글 쓰기