Pandas DataFrame에서 중복 값 처리

Pandas DataFrame에서 중복 값 처리

개요

데이터 분석가로서 정확하고 신뢰할 수 있는 통찰력을 얻기 위해 데이터 무결성을 보장하는 것은 우리의 책임입니다. 데이터 정리는 이 프로세스에서 중요한 역할을 하며 중복 값은 데이터 분석가가 직면하는 가장 일반적인 문제 중 하나입니다. 중복 값은 통찰력을 잘못 나타낼 수 있습니다. 따라서 중복 값을 처리하기 위한 효율적인 방법을 갖는 것이 중요합니다. 이 문서에서는 중복 값을 식별하고 처리하는 방법과 중복 관리를 위한 모범 사례를 알아봅니다.

중복 값 식별

중복 값을 처리하는 첫 번째 단계는 중복 값을 식별하는 것입니다. 중복 값을 식별하는 것은 데이터 정리에서 중요한 단계입니다. Pandas는 데이터 프레임 내에서 중복 값을 식별하기 위한 여러 가지 방법을 제공합니다. 이 섹션에서는 duplicated() 기능과 value_counts() 중복 값을 식별하는 기능.

Usin 중복()

XNUMXD덴탈의 duplicated() 함수는 DataFrame에서 중복 행을 확인하는 Pandas 라이브러리 함수입니다. 의 출력 duplicated() function은 입력 DataFrame과 길이가 같은 부울 계열이며 각 요소는 해당 행이 중복인지 여부를 나타냅니다.

의 간단한 예를 들어 보겠습니다. duplicated() 기능:

import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) df_duplicates = df.duplicated()
print(df_duplicates)

출력:

0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

위의 예에서는 학생 이름과 총점을 포함하는 DataFrame을 만들었습니다. 우리는 호출 duplicated() 부울 시리즈를 생성한 DataFrame에서 False 고유한 값을 나타내는 True 중복 값을 나타냅니다.

이 예에서 값의 첫 번째 발생은 고유한 것으로 간주됩니다. 그러나 마지막 값을 고유한 것으로 간주하고 중복 값을 식별할 때 모든 열을 고려하지 않으려면 어떻게 해야 합니까? 여기에서 다음을 수정할 수 있습니다. duplicated() 매개변수 값을 변경하여 작동합니다.

매개변수: 하위 집합 및 유지

XNUMXD덴탈의 duplicated() 함수는 선택적 매개변수를 통해 사용자 지정 옵션을 제공합니다. 아래에 설명된 대로 두 개의 매개변수가 있습니다.

  • subset: 이 매개 변수를 사용하면 중복 검색 중에 고려할 열의 하위 집합을 지정할 수 있습니다. 하위 집합은 다음으로 설정됩니다. None 기본적으로 DataFrame의 각 열이 고려됨을 의미합니다. 열 이름을 지정하기 위해 하위 집합에 열 이름 목록을 제공할 수 있습니다.

    다음은 하위 집합 매개변수를 사용하는 예입니다.

    
    df_duplicates = df.duplicated(subset=['StudentName'])
    

    출력:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: 이 옵션을 사용하면 중복으로 표시할 중복 행의 인스턴스를 선택할 수 있습니다. keep에 사용할 수 있는 값은 다음과 같습니다.

    • "first": 이것은 기본 값입니다. keep 옵션. 첫 번째 값을 고유한 것으로 간주하여 첫 번째 항목을 제외한 모든 중복 항목을 식별합니다.
    • "last": 이 옵션은 마지막 항목을 고유한 값으로 식별합니다. 다른 모든 항목은 중복으로 간주됩니다.
    • False: 이 옵션은 각 인스턴스에 중복 값으로 레이블을 지정합니다.

다음은 를 사용하는 예입니다. keep 매개 변수 :


df_duplicates = df.duplicated(keep='last')
print(df_duplicates)

출력:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
중복 값 시각화

XNUMXD덴탈의 value_counts() 기능은 중복을 식별하기 위한 두 번째 접근 방식입니다. 그만큼 value_counts() 함수는 각 고유 값이 열에 나타나는 횟수를 계산합니다. 적용하여 value_counts() 기능을 특정 열에 연결하면 각 값의 빈도를 시각화할 수 있습니다.

다음은 를 사용하는 예입니다. value_counts() 기능:

import matplotlib.pyplot as plt
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) name_counts = df['StudentName'].value_counts()
print(name_counts)

출력:

Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64

이제 막대 그래프로 중복 값을 시각화해 보겠습니다. 막대 차트를 사용하여 중복 값의 빈도를 효과적으로 시각화할 수 있습니다.


name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()

중복 값

중복 값 처리

중복 값을 식별한 후에는 해당 값을 처리해야 합니다. 이 섹션에서는 pandas를 사용하여 중복 값을 제거하고 업데이트하는 다양한 전략을 살펴봅니다. drop_duplicates()replace() 기능. 또한 다음을 사용하여 중복 값으로 데이터를 집계하는 방법에 대해 설명합니다. groupby() 기능.

중복 값 제거

중복을 처리하는 가장 일반적인 방법은 DataFrame에서 중복을 제거하는 것입니다. DataFrame에서 중복 레코드를 제거하기 위해 다음을 사용합니다. drop_duplicates() 기능. 기본적으로 이 함수는 각 중복 행의 첫 번째 인스턴스를 유지하고 후속 항목을 제거합니다. 모든 열 값을 기반으로 중복 값을 식별합니다. 그러나 하위 집합 매개 변수를 사용하여 고려할 열을 지정할 수 있습니다.

구문 drop_duplicates() 매개변수의 기본값은 다음과 같습니다.

dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

XNUMXD덴탈의 subsetkeep 매개변수는 다음과 같은 설명을 가집니다. duplicates(). 세 번째 매개변수를 설정하면 inplaceTrue, 모든 수정 사항은 원본 DataFrame에서 직접 수행되므로 메서드가 반환됩니다. None 원본 DataFrame이 수정됩니다. 기본적으로, inplace is False.

다음은 의 예입니다. drop_duplicates() 기능:


df.drop_duplicates(keep='last', inplace=True)
print(df)

출력:

 StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

위의 예에서 첫 번째 항목은 중복 항목이므로 삭제되었습니다.

중복 값 바꾸기 또는 업데이트

중복을 처리하는 두 번째 방법은 Pandas를 사용하여 값을 바꾸는 것입니다. replace() 함수. 그만큼 replace() 함수를 사용하면 DataFrame의 특정 값이나 패턴을 새 값으로 바꿀 수 있습니다. 기본적으로 값의 모든 인스턴스를 바꿉니다. 그러나 limit 매개 변수를 사용하여 교체 횟수를 제한할 수 있습니다.

다음은 replace() 기능:


df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)

출력:

 StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

여기에서 한계는 첫 번째 값을 대체하는 데 사용되었습니다. 마지막 항목을 교체하려면 어떻게 해야 합니까? 이 경우 다음을 결합합니다. duplicated()replace() 기능. 사용 duplicated(), 각 중복 값의 마지막 인스턴스를 표시하고 다음을 사용하여 행 번호를 얻습니다. loc 기능을 사용하여 교체하십시오. replace() 기능. 다음은 사용 예입니다. duplicated()replace() 함께 기능합니다.


last_occurrences = df.duplicated(subset='StudentName', keep='first') last_occurrences_rows = df[last_occurrences] df.loc[last_occurrences, 'StudentName'] = df.loc[last_occurrences, 'StudentName'].replace('Mark', 'Max') print(df)

출력:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45

복잡한 교체를 위한 사용자 지정 함수

경우에 따라 중복 값을 처리하려면 단순히 값을 제거하거나 업데이트하는 것보다 더 복잡한 교체가 필요합니다. 사용자 지정 기능을 사용하면 필요에 맞는 특정 교체 규칙을 만들 수 있습니다. 판다를 이용하여 apply() 함수를 사용하여 사용자 정의 함수를 데이터에 적용할 수 있습니다.

예를 들어 "StudentName" 열에 중복 이름이 있다고 가정합니다. 우리의 목표는 중복 값 끝에 숫자를 추가하여 고유하게 만드는 사용자 지정 함수를 사용하여 중복 값을 바꾸는 것입니다.


def add_number(name, counts): if name in counts: counts[name] += 1 return f'{name}_{counts[name]}' else: counts[name] = 0 return name name_counts = {} df['is_duplicate'] = df.duplicated('StudentName', keep=False)
df['StudentName'] = df.apply(lambda x: add_number(x['StudentName'], name_counts) if x['is_duplicate'] else x['StudentName'], axis=1)
df.drop('is_duplicate', axis=1, inplace=True)
print(df)

출력:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45

중복 값이 ​​있는 데이터 집계

중복 값이 ​​포함된 데이터를 집계하여 데이터를 요약하고 통찰력을 얻을 수 있습니다. 팬더 groupby() 함수를 사용하면 중복 값이 ​​있는 데이터를 집계할 수 있습니다. 를 사용하여 groupby() 함수를 사용하여 하나 이상의 열을 그룹화하고 각 그룹에 대한 다른 열의 평균, 중앙값 또는 합계를 계산할 수 있습니다.

다음은 groupby() 방법:


grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)

출력:

 Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90

고급 기법

보다 복잡한 시나리오를 처리하고 정확한 분석을 보장하기 위해 사용할 수 있는 몇 가지 고급 기술이 있습니다. 이 섹션에서는 퍼지 중복, 시계열 데이터의 중복 및 중복 인덱스 값을 처리하는 방법에 대해 설명합니다.

퍼지 중복

퍼지 중복은 정확히 일치하지는 않지만 유사한 레코드이며 데이터 입력 실수, 맞춤법 오류, 형식 변형 등 다양한 이유로 발생할 수 있습니다. 우리는 fuzzywuzzy 문자열 유사성 일치를 사용하여 중복을 식별하는 Python 라이브러리.

퍼지 값을 처리하는 예는 다음과 같습니다.

import pandas as pd
from fuzzywuzzy import fuzz def find_fuzzy_duplicates(dataframe, column, threshold): duplicates = [] for i in range(len(dataframe)): for j in range(i+1, len(dataframe)): similarity = fuzz.ratio(dataframe[column][i], dataframe[column][j]) if similarity >= threshold: duplicates.append(dataframe.iloc[[i, j]]) if duplicates: duplicates_df = pd.concat(duplicates) return duplicates_df else: return pd.DataFrame() data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) threshold = 70 fuzzy_duplicates = find_fuzzy_duplicates(df, 'StudentName', threshold)
print("Fuzzy duplicates:")
print(fuzzy_duplicates.to_string(index=False))

이 예에서는 사용자 지정 함수를 만듭니다. find_fuzzy_duplicates DataFrame, 열 이름 및 유사성 임계값을 입력으로 사용합니다. 이 함수는 DataFrame의 각 행을 반복하고 다음을 사용하여 후속 행과 비교합니다. fuzz.ratio 의 방법 fuzzywuzzy 도서관. 유사성 점수가 임계값보다 크거나 같으면 중복 행이 목록에 추가됩니다. 마지막으로 이 함수는 퍼지 중복을 포함하는 DataFrame을 반환합니다.

출력:

Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39

위의 예에서 유사 항목은 "StudentName" 열에서 식별됩니다. 'find_fuzzy_duplicates' 함수는 다음을 사용하여 각 문자열 쌍을 비교합니다. fuzzywuzzy 도서관 fuzz.ratio Levenshtein 거리를 기반으로 유사성 점수를 계산하는 함수. 임계값을 70으로 설정했습니다. 즉 일치 비율이 70보다 큰 이름은 퍼지 값으로 간주됩니다. 퍼지 값을 식별한 후 "중복 처리" 섹션에 설명된 방법을 사용하여 이를 관리할 수 있습니다.

시계열 데이터 중복 처리

여러 관찰이 동일한 타임스탬프에 기록되면 중복이 발생할 수 있습니다. 이러한 값을 제대로 처리하지 않으면 편향된 결과를 초래할 수 있습니다. 다음은 시계열 데이터에서 중복 값을 처리하는 몇 가지 방법입니다.

  • 정확한 중복 삭제: 이 방법에서는 다음을 사용하여 동일한 행을 제거합니다. drop_duplicates 팬더의 기능.
  • 값이 다른 중복 타임스탬프: 타임스탬프는 같지만 값이 다른 경우 다음을 사용하여 데이터를 집계하고 더 많은 통찰력을 얻을 수 있습니다. groupby()또는 가장 최근 값을 선택하고 다음을 사용하여 나머지 값을 제거할 수 있습니다. drop_duplicates() 와 더불어 keep 매개변수가 '마지막'으로 설정되었습니다.

중복 인덱스 값 처리

중복 색인 값을 해결하기 전에 먼저 Pandas에서 색인이 무엇인지 정의해 보겠습니다. 인덱스는 DataFrame의 각 행에 할당된 고유 식별자입니다. Pandas는 기본적으로 XNUMX부터 시작하는 숫자 인덱스를 할당합니다. 그러나 인덱스는 모든 열 또는 열 조합에 할당할 수 있습니다. 인덱스 열에서 중복을 식별하기 위해 다음을 사용할 수 있습니다. duplicated()drop_duplicates() 각각의 기능. 이 섹션에서는 다음을 사용하여 인덱스 열에서 중복을 처리하는 방법을 살펴보겠습니다. reset_index().

이름에서 알 수 있듯이 reset_index() Pandas의 함수는 DataFrame의 인덱스를 재설정하는 데 사용됩니다. 를 적용할 때 reset_index() 기능을 사용하면 현재 인덱스가 자동으로 폐기되므로 초기 인덱스 값이 손실됩니다. 지정하여 drop 매개 변수 False FBI 증오 범죄 보고서 reset_index() 기능을 사용하면 인덱스를 재설정하는 동안 원래 인덱스 값을 유지할 수 있습니다.

다음은 사용 예입니다. reset_index():

import pandas as pd data = { 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data, index=['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark']) df.reset_index(inplace=True)
print(df)

출력:

 index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

모범 사례

  • 중복 데이터의 특성 이해: 조치를 취하기 전에 왜 중복 값이 ​​존재하고 무엇을 나타내는지 이해하는 것이 중요합니다. 근본 원인을 파악한 다음 이를 처리할 적절한 단계를 결정합니다.

  • 중복 처리를 위한 적절한 방법 선택: 이전 섹션에서 설명한 것처럼 중복을 처리하는 방법에는 여러 가지가 있습니다. 선택하는 방법은 데이터의 특성과 수행하려는 분석에 따라 다릅니다.

  • 접근 방식 문서화: 중복 값을 감지하고 해결하는 과정을 문서화하여 다른 사람들이 사고 과정을 이해할 수 있도록 하는 것이 중요합니다.

  • 운동주의: 데이터를 제거하거나 수정할 때마다 중복 제거로 인해 분석에 오류나 편향이 발생하지 않도록 해야 합니다. 건전성 테스트를 수행하고 각 작업의 결과를 확인합니다.

  • 원본 데이터 보존: 데이터에 대한 작업을 수행하기 전에 원본 데이터의 백업 복사본을 만듭니다.

  • 향후 중복 방지: 향후 중복 발생 방지를 위한 조치를 시행합니다. 여기에는 데이터 입력 중 데이터 유효성 검사, 데이터 정리 루틴 또는 고유성을 적용하기 위한 데이터베이스 제약 조건이 포함될 수 있습니다.

최종 생각

데이터 분석에서 중복 값을 처리하는 것은 중요한 단계입니다. 중복 값은 부정확한 결과를 초래할 수 있습니다. 중복 값을 효율적으로 식별하고 관리함으로써 데이터 분석가는 정확하고 중요한 정보를 도출할 수 있습니다. 언급된 기술을 구현하고 모범 사례를 따르면 분석가는 데이터의 무결성을 유지하고 데이터에서 귀중한 통찰력을 추출할 수 있습니다.

타임 스탬프 :

더보기 스택카부스