본문 바로가기
Python/Pandas

[Pandas] 중복 행 찾기 Dataframe.duplicated()

by 오늘은강박사갈거야~~ 2022. 2. 27.
반응형

- 이 글은 제가 공부를 하며, 이해한 것을 바탕으로 작성하는 글입니다.

- 그렇기에 틀리거나 잘못된 부분이 있을 수 있습니다.

- 글의 오류를 발견하시면, 댓글로 말씀해 주시면 정말 감사하겠습니다.

 


- 데이터를 처리하다 보면, 데이터를 처음 받아서 확인할 때 또는 데이터를 여러 번 join 하는 경우 등 중복된 행을 확인해야 하는 경우들의 종종 있다. 오늘은 pandas에서 중복 행 관련 처리하는 방법을 정리해 보려고 한다. 

 

[1] 개념

 

pandas에서는 duplicated 메서드를 이용하여, 판단하게 됩니다. 이를 이해하면, 중복 행 관련 작업을 쉽게 처리할 수 있습니다.

DataFrame.duplicated(subset=???, keep='???')

 

- return value

True, False의 series로, 중복이 있으면 True로, 중복이 없는 행은 False로 표기되어 series가 반환

 

- parameter

이 메서드는 2개의 parameter를 가진다.    

- subset : 중복 행을 검증할 대상, 즉 컬럼을 할당하는 것입니다. 컬럼명을 입력하시면 됩니다.
        default : 입력하지 않으면, 디폴트 값으로 모든 컬럼이 중복 행을 검증하는 대상이 됩니다. 

- keep
: 중복된 대상을 어떻게 표기할 것인지에 대한 파라미터입니다. 3가지의 값이 존재합니다. 

        first
: (default) 중복되는 대상이 처음 나올 때, False로 처리하고, 이후 중복 값들은 모두 True로 반환
        last : 중복되는 대상이 마지막으로 나왔을 때만, 중복을 나타내는 True를 반환하고, 전에 나왔던 중복 값들은 False로 반환
        False : 모든 중복되는 대상을 True로 반환

 

[2] 예제

우선, 예제를 실행할 테이블을 만들어준다. 

 

# 테이블을 하나 만들어 줍니다. 

people = [('용용', 32, '대한민국'),
            ('용용', 32, '대한민국'),
            ('줄줄', 28, '영국'),
            ('줄줄', 28, '영국'),
            ('줄줄', 28, '브라질')
            ]
            
test_df = pd.DataFrame(people, columns=['이름', '나이', '국적'])

 

이름  나이 국적
용용 32 대한민국
용용 32 대한민국
줄줄 28 영국
줄줄 28 영국
줄줄 28 브라질

 

이제 간단한 예제 코드를 살펴보자

 

[예제 1]

test_df.duplicated()

이 코드는 파라미터를 모두 기입하지 않았기에, default 값으로 처리되어, 모든 컬럼을 기준으로 중복 행을 찾으며, 중복 행 중에 처음으로 나오는 행만 False로 표기하고 나머지는 모두 True로 처리한다. 결과는 아래와 같다. 

 

False
True
False
True
True

 

[예제 2]

test_df.duplicated(subset='이름')

이 코드는 파라미터로 subset = '국적'을 기입하였다. 그렇기에 중복 검증의 기준은 국적 컬럼이 된다. 결과는 아래와 같다. 

 

False
True
False
True
True

 

[예제 3]

test_df.duplicated(keep='last')

이 코드는 파라미터가 keep = 'last'로 마지막으로 중복된 행이 나오는 것을 제외하고, 이전에 나왔던 모든 중복 행을 True로 반환. 결과는 아래와 같다. 

 

True
False
True
False
False

 

[예제 4]

test_df.duplicated(keep=False)

이 코드는 모든 중복되는 것이 있는 행들을 모두 True로 반환하고, 중복되지 않는 행은 False로 반환하게 됩니다. 결과는 아래와 같다. 

 

True
True
True
True
False

 

[3] 자주 사용하는 방법

이를 어떻게 실제로 활용할 것인가. 일반적으로 내가 가지고 있는 테이블의 중복을 검증하고 싶을 때 사용한다. 나는 아래와 같이 사용한다.  위의 예시를 다시 가지고 와보자.

 

이름  나이 국적
용용 32 대한민국
용용 32 대한민국
줄줄 28 영국
줄줄 28 영국
줄줄 28 브라질

 

- 중복된 값이 어떤 것인지 가지고 오기

 

test_df[test_df.duplicated()]

 

- 중복된 값을 없애고, 테이블을 가지고 올 때 

test_df[~test_df.duplicated()]

 

[4] 참조

 

pandas.DataFrame.duplicated — pandas 1.4.1 documentation (pydata.org)

반응형

댓글