- 이 글은 제가 공부를 하며, 이해한 것을 바탕으로 작성하는 글입니다.
- 그렇기에 틀리거나 잘못된 부분이 있을 수 있습니다.
- 글의 오류를 발견하시면, 댓글로 말씀해 주시면 정말 감사하겠습니다.
- 데이터를 처리하다 보면, 데이터를 처음 받아서 확인할 때 또는 데이터를 여러 번 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)
댓글