본문 바로가기
Python/Pandas

중복데이터의 처리(duplicated, drop_duplicates)-pandas(22)

by 콩돌 2019. 11. 6.
반응형

파이썬 버전 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이다.

원본 데이터를 변경할 것인지 수정된 복사본을 반환할 것인지 여부를 결정한다.


 

 

 

 

 참고자료

  https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.duplicated.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

 

 

 

 


반응형

댓글