Programming/Python

판다스 업무 최적화 - 엑셀 중복값 찾는 방법 총정리

remake 2023. 5. 10. 10:42

파이썬 판다스에서 중복값을 찾는 방법을 알아보겠습니다.

 

업무를 진행하다보면 판다스를 활용해서 중복값을 찾아야하는 업무가 종종 있는데요.

 

판다스 중복값 찾기

판다스에서 중복값을 찾는 명령어는 

 

duplicated인데요. subset을 활용하면 중복값을 찾고자하는 열을 선택할 수 있습니다.

 

이때 keep은 중복값 처리를 위한 값인데요.

 

first는 처음것을 남기고, last는 마지막, false는 그냥 두는 것입니다.

 

 keep = 'first', 'last', False

import pandas as pd


data = {'name':['a', 'b', 'b', 'c', 'c'],
        'id': ['aa' , 'aa', 'bb', 'cc', 'dd'],
         'col':[1, 2, 3, 4, 5]}


df = pd.DataFrame(data, columns=['name','id','col'])

df_copy = df.duplicated(subset=['name'], keep=False)

print(df)

print(df_copy)

아래처럼 결과가 나옵니다.

이 때 복제된 여부의 값을 합쳐서 보기 위해서는 concat을 활용해서 붙여서 볼 수 있는데요.

 

axis를 1을 주면 왼쪽 오른쪽으로 합치게 됩니다.

 

import pandas as pd


data = {'name':['a', 'b', 'b', 'c', 'c'],
        'id': ['aa' , 'aa', 'bb', 'cc', 'dd'],
         'col':[1, 2, 3, 4, 5]}


df = pd.DataFrame(data, columns=['name','id','col'])

df_copy = df.duplicated(subset=['name'], keep=False)

df3 = pd.concat([df, df_copy], axis=1)

df3.columns = ['name', 'id', 'col','duf']

print(df3)

그래서 duf라는 필드에서 아래처럼 복사가 되게 됩니다.

 

판다스 중복값 개수 찾기

그리고 또 많이 쓰는 기능은 중복값 별로 갯수를 찾아야 하는 것인데요.

 

이 때에는 value_conuts() 함수를 활용할 수 있습니다.

df4 = pd.DataFrame(df3['name'].value_counts().reset_index())

현재 중복값을 찾으면 아래처럼 2/2/1개가 나오는데요.

이걸 활용해서 index가 아니라 name과 count로 변경하는 것이 보기 좋기 때문에

중복값

최종적으로 찾은 중복값 찾기 소스입니다.

 

이를 활용해서 다양한 방식으로 활용이 가능합니다.

import pandas as pd

#데이터 만들기
data = {'name':['a', 'b', 'b', 'c', 'c'],
        'id': ['aa' , 'aa', 'bb', 'cc', 'dd'],
         'col':[1, 2, 3, 4, 5]}

df = pd.DataFrame(data, columns=['name','id','col'])

#중복값 찾기

df_copy = df.duplicated(subset=['name'], keep=False)

df3 = pd.concat([df, df_copy], axis=1)

df3.columns = ['name', 'id', 'col','duf']

#중복값 갯수 확인

df4 = pd.DataFrame(df3['name'].value_counts().reset_index())

df4.columns = ['name', 'count']

df3 = pd.merge(df3, df4, on='name')

print(df3)

 

중복값 처리하기

판다스에서 마지막으로 이제 중복값을 처리할 수 잇는데요.

이경우 사용하는 함수는 drop_duplicates입니다.

 

위에서 중복이 있는지 알아보는 duplicated와 용법은 비슷합니다.

 

drop_duplicates(subset=['name'], keep='last')

 

df5 = df3.drop_duplicates(subset=['name'], keep='last')

print(df5)

중복값중 마지막 값을 남기고 삭제하면 아래처럼 처리가 됩니다.

오늘은 판다스를 활용해서 중복값이 있는지, 찾고 또 제거하는 방법을 알아보았는데요.

 

실무에서 자주 쓰는 기능이니 한번 정리해두시면 나중에 잘 사용할 수 있습니다.