-
[Pandas] 데이터프레임 중복 확인 및 제거 :: duplicated, drop_duplicates (unhashable type error 해결) (drop duplicates)직접 해보기/Python 2021. 4. 25. 21:27728x90반응형
파이썬 데이터프레임 중복 데이터 다루기
Pandas DataFrame duplication
(1) 중복되는 행(Row) 제거하기 :: drop_duplicates
데이터프레임에서 중복되는 행 데이터를 제거할 때, pandas의 drop_duplicates 메소드를 사용한다.
pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html
< example >
(1)-1. 1개 칼럼 기준으로 중복 제거 (열 지정)
# MF 칼럼만 지정하여 중복되는 행 제거 df.drop_duplicates(['MF'])
(1)-2. 여러 칼럼 기준으로 중복 제거 (여러 열 지정)
# MF, Age 2개의 칼럼을 지정하여 중복되는 행 제거 df.drop_duplicates(['MF', 'Age'])
(1)-3. 중복 제거하면서 남길 데이터 지정
# 중복 데이터 전부 제거 :: False df.drop_duplicates(['MF', 'Age'], keep = False) # 맨 위 / 첫 번째 행 남기고 전부 제거 :: first df.drop_duplicates(['MF', 'Age'], keep = 'first') # 맨 아래 / 마지막 행 남기고 전부 제거 :: last df.drop_duplicates(['MF', 'Age'], keep = 'last') # keep 에 아무것도 지정하지 않으면 디폴트 값은 'first'
(2) 중복되는 행(Row) 확인하기 :: duplicated
제거말고, 확인만 하고 싶을 때 duplicated 메소드를 사용한다.
pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.html
(2)-1. 중복 여부만 확인 (True or False)
# MF 열을 기준으로 중복 여부만 확인하기 dup = df.duplicated(['MF']) # 여기서 dup의 데이터타입은 Series dup
(2)-2. 중복 여부 칼럼 추가 (DataFrame 열 추가)
- pandas concat
# 원래 데이터프레임에 중복여부 칼럼 추가 => 새로운 데이터프레임 생성 df_dup = pd.concat([df, dup], axis=1)
- pandas rename
# 새로운 데이터프레임의 열 이름 바꾸기 df_dup.rename(columns = {0 : 'Dup'}, inplace = True)
(3) drop_duplicates unhashable type / duplicated unhashable type
drop_duplicates, duplicated 메소드를 사용했는데, unhashable type 이라면서 오류가 나오는 경우가 있다.
예를 들어 "TypeError: unhashable type: 'list' " 같은 경우,
list는 "변경 가능한 데이터 타입"이기 때문에
리스트를 기준으로 중복 확인을 못 하겠다는 뜻이다.
이러한 경우는 "변경 불가능한 데이터 타입"인 튜플로 바꿔준 다음, 중복 처리를 하는 것이 좋다.
- tuple 변환하여 중복 처리
# Like_Tuple: Like 칼럼을 튜플로 변환한 칼럼 df['Like_Tuple'] = df.Like.apply(lambda x: tuple(x)) # Like_Tuple 칼럼을 기준으로 중복 제거 df.drop_duplicates(['Like_Tuple'], keep = 'first')
나같은 경우는 귀찮아서 중복 기준으로 사용할 칼럼을 전부 string type으로 바꾸고 바로 중복 처리를 한다~
물론 이렇게 바꿔도 분석하는 데에 아무 문제가 없을 때에만!
- string 변환하여 중복처리
# Like_string: Like 칼럼을 문자열(string) 타입으로 변환한 칼럼 df['Like_string'] = df['Like'].astype(str) # Like_string 칼럼을 기준으로 중복 제거 df_dup = df.drop_duplicates(['Like_string'], keep = 'first')
728x90반응형'직접 해보기 > Python' 카테고리의 다른 글
아나콘다Anaconda 설치 (파이썬, 주피터노트북까지 한번에 됨) (3) 2024.06.04 [크롤링 준비하기] 셀레니움Selenium 크롬드라이버ChromeDriver 설치 (1) 2024.06.04 [Python파이썬] 주피터 노트북 아나콘다 D드라이브 실행 (0) 2024.05.16 [빈도분석] 리스트 카운트 함수, 딕셔너리 정렬 함수 :: List Frequency, Sorting Dictionary (0) 2021.05.06 [Pandas] 데이터프레임 조건 지정 행 조회 :: Row by condition (0) 2021.05.06