programing

Pandas dataframe 열에 중복된 값 확인

closeapi 2023. 10. 3. 09:20
반응형

Pandas dataframe 열에 중복된 값 확인

팬더에서 실제로 행을 떨어뜨리지 않고 데이터 프레임 열에 중복된 값이 있는지 확인할 수 있는 방법이 있습니까?중복된 행을 제거해주는 기능이 있는데 실제로 특정 열에 중복된 행이 있을 경우에만 실행했으면 합니다.

현재 열에 있는 고유 값의 수를 행의 수와 비교합니다. 행보다 고유 값이 적으면 중복이 발생하고 코드가 실행됩니다.

 if len(df['Student'].unique()) < len(df.index):
    # Code to remove duplicates based on Date column runs

팬더를 사용하여 특정 열에 중복된 값이 존재하는지 확인하는 보다 쉽고 효율적인 방법이 있습니까?

현재 작업 중인 일부 표본 데이터(표시된 열 두 개만 있음).중복 항목이 있는 경우 다른 기능은 보관할 행(가장 오래된 날짜가 있는 행)을 식별합니다.

    Student Date
0   Joe     December 2017
1   James   January 2018
2   Bob     April 2018
3   Joe     December 2017
4   Jack    February 2018
5   Jack    March 2018

본질문

열에 True/False 값이 중복되어 있습니까?

╔═════════╦═══════════════╗
║ Student ║ Date          ║
╠═════════╬═══════════════╣
║ Joe     ║ December 2017 ║
╠═════════╬═══════════════╣
║ Bob     ║ April 2018    ║
╠═════════╬═══════════════╣
║ Joe     ║ December 2018 ║
╚═════════╩═══════════════╝

위의 dataframe(df)을 가정하면, 우리는 에서 중복되는 경우 빠른 확인을 할 수 있습니다.Student콜비:

boolean = not df["Student"].is_unique      # True (credit to @Carsten)
boolean = df['Student'].duplicated().any() # True

추가 읽기 및 참고 자료

위에서는 판다 시리즈 방법 중 하나를 사용하고 있습니다.판다 DataFrame에는 몇 가지 유용한 방법이 있는데, 그 중 두 가지 방법이 있습니다.

  1. drop_duplicates(self[, subset, keep, inplace]) - 중복된 행이 제거된 DataFrame을 반환하며, 선택적으로 특정 열만 고려합니다.
  2. duplicated(self[, subset, keep]) - 중복된 행을 나타내는 부울 시리즈를 반환합니다. 선택적으로 특정 열만 고려합니다.

이러한 방법은 위와 같은 Serie(열)만이 아니라 DataFrame 전체에 적용할 수 있습니다.이와 동등한 것은 다음과 같습니다.

boolean = df.duplicated(subset=['Student']).any() # True
# We were expecting True, as Joe can be seen twice.

그러나 전체 프레임에 관심이 있다면 다음과 같이 진행할 수 있습니다.

boolean = df.duplicated().any() # False
boolean = df.duplicated(subset=['Student','Date']).any() # False
# We were expecting False here - no duplicates row-wise 
# ie. Joe Dec 2017, Joe Dec 2018

그리고 마지막 유용한 팁.를 사용하여keepparameter는 일반적으로 몇 개의 행을 건너뛰고 필요한 것을 직접 액세스할 수 있습니다.

keep: {'first', '마지막', False}, 기본값 'first'

  • first : 처음 발생한 것을 제외한 중복을 드롭합니다.
  • last : 마지막으로 발생한 것을 제외하고 중복을 드롭합니다.
  • False : 모든 중복을 삭제합니다.

가지고 놀 예

import pandas as pd
import io

data = '''\
Student,Date
Joe,December 2017
Bob,April 2018
Joe,December 2018'''

df = pd.read_csv(io.StringIO(data), sep=',')

# Approach 1: Simple True/False
boolean = df.duplicated(subset=['Student']).any()
print(boolean, end='\n\n') # True

# Approach 2: First store boolean array, check then remove
duplicate_in_student = df.duplicated(subset=['Student'])
if duplicate_in_student.any():
    print(df.loc[~duplicate_in_student], end='\n\n')

# Approach 3: Use drop_duplicates method
df.drop_duplicates(subset=['Student'], inplace=True)
print(df)

돌아온다

True

  Student           Date
0     Joe  December 2017
1     Bob     April 2018

  Student           Date
0     Joe  December 2017
1     Bob     April 2018

사용가능is_unique:

df['Student'].is_unique

# equals true in case of no duplicates

이전 판다 버전이 필요합니다.

pd.Series(df['Student']).is_unique

사용하는 복제품의 개수와 종류를 알고 싶다면 다음과 같이 하십시오.

df.pivot_table(index=['ColumnName'], aggfunc='size')

df.pivot_table(index=['ColumnName1',.., 'ColumnNameN'], aggfunc='size')

그리고, 팬더는 또한 a와.

import pandas as pd

df = pd.read_csv("https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv")

Python ≥ 3.8의 경우 중복 여부를 확인하고 일부 중복 행에 액세스합니다.

if (duplicated := df.duplicated(keep=False)).any():
    some_duplicates = df[duplicated].sort_values(by=df.columns.to_list()).head()
    print(f"Dataframe has one or more duplicated rows, for example:\n{some_duplicates}")

언급URL : https://stackoverflow.com/questions/50242968/check-for-duplicate-values-in-pandas-dataframe-column

반응형