Appia의 IT세상

파이썬[Python] Pandas, DataFrame의 행(Row)기반의 중복된 데이터 찾기, 선택한 열(Column)기반 중복데이터 찾기 본문

Python/Python Pandas

파이썬[Python] Pandas, DataFrame의 행(Row)기반의 중복된 데이터 찾기, 선택한 열(Column)기반 중복데이터 찾기

Appia 2020. 11. 8. 07:03
반응형

파이썬[Python] Pandas, DataFrame의 행(Row)기반의 중복된 데이터 찾기

 

종종 작업을 하다보면, 본의 아닌 이유로 중복된 데이터를 입력하게 되는 경우가 있습니다. 저의 경우 최근에 주식 관련된 데이터를 파싱해오고, 여러개의 데이터를 병합하는 과정에서 중복된 데이터가 존재하게 되었습니다. 그래서 처음에는 관련된 부분들을 손수 삭제하기 시작했는데, 어느 순간 그 부분이 손으로 하기에는 너무 많은 존재가 되어 버렸습니다. 그래서 이번에는 관련해서 행(Row)기반으로 중복된 데이터를 찾는 방법에 대해서 포스팅을 해보고자 합니다. 

 

먼저 샘플 코드를 보면 다음과 같습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Kim''Lee''Park','Choi']),
 
      'Age': pd.Series([2526252325]),
 
      'Rating': pd.Series([2.563.204.63.8,2.56])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)  # 출력 DataFrame
cs

 

위와 같은 코드를 바탕으로 출력을 해보니, 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
   Name  Age  Rating
0  Choi   25    2.56
1   Kim   26    3.20
2   Lee   25    4.60
3  Park   23    3.80
4  Choi   25    2.56
cs

 

위에서 보이는 바와 같이 0번과 4번 데이터가 동일하게 Choi, 25, 2.56인것을 알 수 있습니다. 관련해서 중복된 부분들을 찾기 위해서는 DataFrame에서 제공하는 다음 함수를 이용하시면 됩니다. 

DataFrame.duplicated()

 

행(Row) 기반의 중복 데이터 찾기

위의 함수를 코드에 적용하여 실행해보도록 하겠습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Kim''Lee''Park','Choi']),
 
      'Age': pd.Series([2526252325]),
 
      'Rating': pd.Series([2.563.204.63.8,2.56])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)  # 출력 DataFrame
 
print("\nDuplicated Data :\n")
 
duplicateDFRow = df[df.duplicated()]
 
print(duplicateDFRow)
cs

위의 코드를 실행해보면 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
7
8
9
10
11
   Name  Age  Rating
0  Choi   25    2.56
1   Kim   26    3.20
2   Lee   25    4.60
3  Park   23    3.80
4  Choi   25    2.56
 
Duplicated Data :
 
   Name  Age  Rating
4  Choi   25    2.56
cs

만약 위의 duplicated()의 인자값으로 다음과 같은 keep='last'을 마지막 데이터는 실제 데이터로 간주하고 앞에 있는 데이터를 중복데이터로 간주합니다. 그럼 코드와 실행된 결과를 한번 살펴보겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Kim''Lee''Park','Choi']),
 
      'Age': pd.Series([2526252325]),
 
      'Rating': pd.Series([2.563.204.63.8,2.56])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)  # 출력 DataFrame
 
print("\nDuplicated Data :\n")
 
duplicateDFRow = df[df.duplicated(keep='last')]
 
print(duplicateDFRow)
cs

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
7
8
9
10
11
   Name  Age  Rating
0  Choi   25    2.56
1   Kim   26    3.20
2   Lee   25    4.60
3  Park   23    3.80
4  Choi   25    2.56
 
Duplicated Data :
 
   Name  Age  Rating
0  Choi   25    2.56
cs

그럼 이제는 열(Column)기반의 중복 데이터에 대해서 검출하는 방법에 대해서 살펴보겠습니다. 

 

열(Column)기반의 중복데이터 찾기

duplicated()함수의 인자 값으로 원하는 Column이름을 입력해주시면 그 부분에 대한 중복 데이터에 대해서확인을 해줍니다. 그럼 간단히 코드로 살펴보겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
 
# Series 생성
 
ds = {'Name': pd.Series(['Choi''Kim''Lee''Park','Choi']),
 
      'Age': pd.Series([2526252325]),
 
      'Rating': pd.Series([2.563.204.63.8,2.56])}
 
# DataFrame 생성
 
df = pd.DataFrame(ds)
 
print(df)  # 출력 DataFrame
 
print("\nDuplicated Data :\n")
 
duplicateDFRow = df[df.duplicated('Age')]
 
print(duplicateDFRow)
cs

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
7
8
9
10
11
12
   Name  Age  Rating
0  Choi   25    2.56
1   Kim   26    3.20
2   Lee   25    4.60
3  Park   23    3.80
4  Choi   25    2.56
 
Duplicated Data :
 
   Name  Age  Rating
2   Lee   25    4.60
4  Choi   25    2.56
cs

 

물론, 처음 0 Choi 25 2.56의 Age부분 25를 보고 관련된 Age가 중복되는 데이터들을 표시해줍니다. 위와 같은 부분들을 통해서 중첩되는 데이터에 대해서 쉽게 확인할 수 있습니다.

 

이번 포스팅에서는  파이썬[Python] Pandas, DataFrame의 행(Row)기반의 중복된 데이터 찾기, 선택한 열(Column)기반 중복데이터 찾기라는 주제로 포스팅을 해봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments