Pandas가 중복 행 삭제

Suraj Joshi 2023년1월30일
  1. DataFrame.drop_duplicates()구문
  2. DataFrame.drop_duplicates()메서드를 사용하여 중복 행 제거
  3. drop_duplicates()메소드에서keep='last' 설정
Pandas가 중복 행 삭제

이 튜토리얼에서는DataFrame.drop_duplicates()메소드를 사용하여 Pandas DataFrame에서 모든 중복 행을 제거하는 방법을 설명합니다.

DataFrame.drop_duplicates()구문

DataFrame.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)

DataFrame에서 반복되는 모든 행을 제거하는 DataFrame을 반환합니다.

DataFrame.drop_duplicates()메서드를 사용하여 중복 행 제거

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates()

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

출력:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300 

모든 열에 대해 모두 동일한 값을 갖는 행을 제거합니다. 기본적으로 DataFrame의 각 열에 대해 동일한 값을 가진 행만 중복으로 간주됩니다. df_with_duplicates DataFrame에서 첫 번째와 다섯 번째 행은 다섯 번째 행이 제거 된 모든 열에 대해 동일한 값을 갖습니다.

특정 열만을 기준으로 중복 항목을 제거하도록subset 매개 변수 설정

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"])

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

출력:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

여기서는drop_duplicates()메소드에subset 인수로Name을 전달합니다. 네 번째 및 다섯 번째 행은 첫 번째 열과 동일한 Name열 값을 가지므로 제거됩니다.

drop_duplicates()메소드에서keep='last' 설정

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep="last")

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

출력:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
5  302   Watch  300 

Name열과 동일한 값을 갖는 마지막 행을 제외한 모든 행을 제거합니다.

열과 동일한 값을 갖는 모든 행을 제거하기 위해keep = False를 설정합니다.

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep=False)

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

출력:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

첫 번째, 다섯 번째, 여섯 번째 행은 모두 Name열에 대해 동일한 값을 갖기 때문에 제거됩니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

관련 문장 - Pandas DataFrame Row