파이썬 버전 3.7 기준
pandas 버전 0.25.1 기준
중복데이터의 처리 |
본 포스팅에서는 pandas에서 duplicated 및 drop_duplicates 메서드를 활용하여 중복데이터를 처리하는 방법에 대해 다룬다.
중복 데이터 처리를 위한 메서드 |
만약 사용자가 DataFrame에서 중복된 열을 확인하거나 제거해야한다면, 아래의 2가지 메서드를 통해 이를 할 수 있다.
○ duplicated: 메서드가 적용된 열과 길이가 동일한 불린 벡터를 반환한다. 그리고 어떤 요소가 중복된 요소인지 확인할 수 있다.
○ drop_duplicates: 중복 요소를 삭제한다.
○ 이 두 메서드는 중복된 요소를 식별하기 위해 열을 입력변수로 사용한다.
이 메서드들은 Series, DataFrame, Index객체에 적용이 가능하다.
각 메서드의 사용형식은 다음과 같다.
각 메서드의 사용형식)
DataFrame.duplicated(subset=None, keep='first')
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
subset은 중복데이터를 처리할 열을 입력받는다.
○ Series, Index에 적용할 경우 이 입력변수를 사용하지 않는다.
inplace는 메서드가 적용되는 원본 데이터를 변경할지 여부를 결정한다.
keep은 중복데이터 발견시 어떤 데이터를 마크할지 혹은 삭제할지 여부를 결정하는 변수이다. 상세사항은 아래와 같다.
○ keep='first'(default) : 처음에 발견된 데이터를 제외하고 중복데이터를 마크하거나 삭제한다.
○ keep='last' : 마지막으로 발견된 데이터를 제외하고 중복데이터를 마크하거나 삭제한다.
○ keep=False : 모든 중복데이터를 마크하거나 삭제한다.
각 메서드 사용 예제 |
다음 예제는 위에 설명한 사용 형식에 따라 각 메서드를 사용하는 예제이다.
앞서 설명했다시피 Index 객체와 Series 객체에도 해당 메서드들이 적용 가능하나 사용하는 방식은 거의 유사하기 때문에 DataFrame을 이용하여 예제를 수행하도록 한다.
각 메서드의 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[4]: ex_df=pd.DataFrame([[0,1,3],[0,2,4],[0,3,3],[1,2,3]], columns=['c0','c1','c2'])
ex_df
Out[5]:
c0 c1 c2
0 0 1 3
1 0 2 4
2 0 3 3
3 1 2 3
ex_df.duplicated('c0')
Out[6]:
0 False
1 True
2 True
3 False
dtype: bool
ex_df.drop_duplicates('c0')
Out[7]:
c0 c1 c2
0 0 1 3
3 1 2 3
열의 레이블로 구성된 배열을 이용한다면 사용자가 원하는 열들에 대해서 중복 행을 검색을 수행할 수 있다.
○ 이 경우 해당되는 행의 요소가 모두 중복될 경우 해당 행이 중복됬다고 인식한다.
열의 레이블 배열 입력 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[4]: ex_df.duplicated(['c0','c2'])
Out[8]:
0 False
1 False
2 True
3 False
dtype: bool
ex_df.drop_duplicates(['c0','c2'])
Out[9]:
c0 c1 c2
0 0 1 3
1 0 2 4
3 1 2 3
keep입력변수를 적절히 활용한다면 마크하거나 삭제할 데이터를 선택할 수 있다.
keep 입력변수 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[4]: ex_df.duplicated('c0',keep='first')
Out[10]:
0 False
1 True
2 True
3 False
dtype: bool
ex_df.duplicated('c0',keep='last')
Out[11]:
0 True
1 True
2 False
3 False
dtype: bool
ex_df.duplicated('c0',keep=False)
Out[12]:
0 True
1 True
2 True
3 False
dtype: bool
ex_df.drop_duplicates('c0',keep='first')
Out[13]:
c0 c1 c2
0 0 1 3
3 1 2 3
ex_df.drop_duplicates('c0',keep='last')
Out[14]:
c0 c1 c2
2 0 3 3
3 1 2 3
ex_df.drop_duplicates('c0',keep=False)
Out[15]:
c0 c1 c2
3 1 2 3
각 메서드 옵션 세부사항 |
DataFrame.duplicated(self, subset=None, keep='first') |
중복데이터가 있는 행에 True로 마크하여 불린 Series를 반환한다.
오직 정확한 열에만 해당 메서드를 적용할 수 있다.
subset: column label 혹은 columns label의 sequence
선택적으로 입력가능하다.
중복데이터를 확인하기 위한 열을 입력 받으며 정확한 열을 입력해야한다.
기본값으로는 모든 열에 대해 중복데이터를 확인한다.
keep: {'first', 'last', False}
선택적으로 입력 가능하다.
기본값은 'first'이며 선택적으로 입력 가능하다.
○ 'first': 첫번째로 발견된 중복데이터를 제외하고 나머지 중복데이터를 True로 마킹한다.
○ 'last': 마지막으로 발견된 중복데이터를 제외하고 나머지 중복데이터를 True로 마킹한다.
○ False: 모든 중복데이터를 True로 마킹한다.
DataFrame.drop_duplicates(self, subset=None, keep='first', inplace=False) |
각 행별로 중복데이터를 검토하여 중복데이터를 삭제한 DataFrame을 반환한다.
오직 정확한 열에만 해당 메서드를 적용할 수 있다.
인덱스는 무시된다.
subset: column label 혹은 columns label의 sequence
선택적으로 입력가능하다.
중복데이터를 확인하기 위한 열을 입력 받으며 정확한 열을 입력해야한다.
기본값으로는 모든 열에 대해 중복데이터를 확인한다.
keep: {'first', 'last', False}
선택적으로 입력 가능하다.
기본값은 'first'이며 선택적으로 입력 가능하다.
○ 'first': 첫번째로 발견된 중복데이터를 제외하고 나머지 중복데이터를 삭제한다.
○ 'last': 마지막으로 발견된 중복데이터를 제외하고 나머지 중복데이터를 삭제한다.
○ False: 모든 중복데이터를 삭제한다.
inplace: boolean
선택적으로 입력 가능하며, 기본값은 False이다.
원본 데이터를 변경할 것인지 수정된 복사본을 반환할 것인지 여부를 결정한다.
'Python > Pandas' 카테고리의 다른 글
객체간의 연산 add, sub, mul, div-pandas(24) (0) | 2020.04.05 |
---|---|
랜덤 샘플의 추출 및 선택(sample)-pandas(23) (0) | 2019.11.09 |
인덱스의 설정과 리셋(배정, set_index, reset_index)-pandas(21) (1) | 2019.11.05 |
index(인덱스)객체의 생성, 개요, 처리방법-pandas(20) (0) | 2019.11.03 |
get 및 lookup 메서드 설명, 옵션, 사용 예제 -pandas(19) (0) | 2019.11.01 |
댓글