Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Pandas에서 중복 행을 찾고 필터링하는 방법은 무엇입니까?

<시간/>

데이터를 분석하는 동안 데이터를 바로 삭제하는 대신 중복 행을 살펴보고 데이터에 대해 더 많이 이해해야 하는 경우가 있습니다.

운 좋게도 pandas에서는 복제본을 처리할 수 있는 방법이 거의 없습니다.

.dupliated()

이 방법을 사용하면 DataFrame에서 중복 행을 추출할 수 있습니다. 중복이 있는 새 데이터 세트를 사용합니다. 링크에서 Hr Dataset을 다운로드했습니다.

import pandas as pd
import numpy as np

# Import HR Dataset with certain columns
df = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/HRDataset.csv",
usecols = ("Employee_Name""PerformanceScore","Position","CitizenDesc"))

#Sort the values on employee name and make it permanent
df.sort_values("Employee_Name"inplace = True)
df.head(3)


<머리><번째>
직원 이름
위치
시민설명
실적 점수
0
아디놀피
생산 기술자 I
미국 시민
초과
1
아디놀피
선생님. DBA
미국 시민
완전히 만나다
2
아디놀피
생산 기술자 II
미국 시민
완전히 만나다


기본적으로 duplicated()가 작동하는 방식은 매개변수를 유지하는 것입니다. 이 매개변수는 각 값이 중복되지 않는 것으로 가장 먼저 나타나는 것을 표시합니다.

이 방법은 행이 두 번 이상 존재하는 경우 중복으로 표시하지 않고 첫 번째 행 이후의 각 후속 행을 중복으로 표시합니다. 혼란스러운? 예를 들어 한 번 더 설명하겠습니다. 바구니에 3개의 사과가 있다고 가정해 보겠습니다. 이 방법은 첫 번째 사과를 중복되지 않은 것으로 표시하고 나머지 두 개의 사과를 중복된 것으로 표시하는 것입니다.

예시

df["Employee_Name"].head(3)

출력

0 Adinolfi
1 Adinolfi
2 Adinolfi
Name: Employee_Name, dtype: object

예시

df["Employee_Name"].duplicated().head(3)

출력

0 False
1 True
2 True
Name: Employee_Name, dtype: bool

이제 중복 항목을 추출하려면(첫 번째 항목이 중복 항목이 아니라 하위 시퀀스 항목이 중복 항목이며 이 방법으로 출력된다는 것을 기억하십시오) 이 방법을 데이터 프레임에 전달해야 합니다.

df.shape


(310, 4)


df[df["Employee_Name"].duplicated()]


<머리><일>
<트><일>...
직원 이름
위치
시민설명
실적 점수
1
아디놀피
선생님. DBA
미국 시민
완전히 만나다
2
아디놀피
생산 기술자 II
미국 시민
완전히 만나다
3
아디놀피
생산 기술자 I
미국 시민
완전히 만나다
4
아디놀피
프로덕션 매니저
미국 시민
완전히 만나다
6
앤더슨
생산 기술자 I
미국 시민
초과
...
...
...
...
303

생산 기술자 II
미국 시민
완전히 만나다
304

생산 기술자 II
미국 시민
완전히 만나다
305

생산 기술자 I
미국 시민
PIP
306

CIO
미국 시민
초과
307

데이터 분석가
미국 시민
완전히 만나다

79행 × 4열

위의 출력에서 ​​.duplicated() 메서드를 사용하여 추출된 79개의 중복 행이 있는 310개의 행이 있습니다.

인수-"마지막"

기본적으로 이 메서드는 값이 중복되지 않은 첫 번째 항목을 표시합니다. keep =last 인수를 전달하여 이 동작을 변경할 수 있습니다.

이 매개변수는 처음 두 사과를 중복으로 표시하고 마지막 사과는 중복되지 않음으로 표시합니다.

df[df["Employee_Name"].duplicated(keep="last")]


<머리><일>
<트><일>...
직원 이름
위치
시민설명
실적 점수
0
아디놀피
생산 기술자 I
미국 시민
초과
1
아디놀피
선생님. DBA
미국 시민
완전히 만나다
2
아디놀피
생산 기술자 II
미국 시민
완전히 만나다
3
아디놀피
생산 기술자 I
미국 시민
완전히 만나다
5
앤더슨
생산 기술자 I
미국 시민
완전히 만나다
...
...
...
...
302

생산 기술자 II
미국 시민
초과
303

생산 기술자 II
미국 시민
완전히 만나다
304

생산 기술자 II
미국 시민
완전히 만나다
305

생산 기술자 I
미국 시민
PIP
306

CIO
미국 시민
초과

인수 - 거짓

keep 매개변수는 또한 두 번 이상 발생하는 모든 값을 중복으로 표시하는 추가 인수 "false"를 허용합니다. 이 경우 위의 예에 표시된 것처럼 3개의 사과가 모두 첫 번째 또는 마지막이 아닌 중복으로 표시됩니다.

참고 – false 매개변수를 지정할 때 따옴표를 사용하지 마십시오.

df[df"Employee_Name"].duplicated(keep=False)]


<머리><번째>
<트><일>...
직원 이름
위치
시민설명
실적 점수
0
아디놀피
생산 기술자 I
미국 시민
초과
1
아디놀피
선생님. DBA
미국 시민
완전히 만나다
2
아디놀피
생산 기술자 II
미국 시민
완전히 만나다
3
아디놀피
생산 기술자 I
미국 시민
완전히 만나다
4
아디놀피
프로덕션 매니저
미국 시민
완전히 만나다
...
...
...
...
303

생산 기술자 II
미국 시민
완전히 만나다
304

생산 기술자 II
미국 시민
완전히 만나다
305

생산 기술자 I
미국 시민
PIP
306

CIO
미국 시민
초과
307

데이터 분석가
미국 시민
완전히 만나다

이제 마지막으로 데이터 세트에서 고유한 값을 추출하기 위해 "~"(틸다) 기호를 사용하여 값을 무효화할 수 있습니다.

df_unique~df["Employee_Name"].duplicated(keep=False)df[df_unique]


<머리><번째>
<트><일>...
직원 이름
위치
시민설명
실적 점수
7
안드레아
소프트웨어 엔지니어
미국 시민
완전히 만나다
25
보지
프로덕션 매니저
미국 시민
완전히 만나다
26
브라만테
운영 이사
미국 시민
초과
27
브릴
생산 기술자 I
미국 시민
완전히 만나다
34
버켓
생산 기술자 II
미국 시민
완전히 만나다
...
...
...
...
276
스위트워터
소프트웨어 엔지니어
미국 시민
초과
277
자보
생산 기술자 I
비시민권자
완전히 만나다
278
타바레스
생산 기술자 II
미국 시민
완전히 만나다
308
저우
생산 기술자 I
미국 시민
완전히 만나다
309
지마



drop_duplicates()

이 방법은 이전 방법과 매우 유사하지만 이 방법은 단일 시리즈가 아닌 DataFrame에 있을 수 있습니다.

참고:- 이 방법은 DataFrame의 모든 열에서 중복 행을 찾아 삭제합니다.

len(df)

출력

310


len(df.drop_duplicates())

출력

290

하위 매개변수

부분집합 매개변수는 열 이름 목록을 중복 여부를 확인할 수 있는 문자열 값으로 허용합니다.

df1=df.drop_duplicates(subset=["Employee_Name"],keep="first")df1
<머리><일>
<트><일>...
직원 이름
위치
시민설명
실적 점수
0
아디놀피
생산 기술자 I
미국 시민
초과
5
앤더슨
생산 기술자 I
미국 시민
완전히 만나다
7
안드레아
소프트웨어 엔지니어
미국 시민
완전히 만나다
14
아스왈
생산 기술자 I
미국 시민
완전히 만나다
20
부리
생산 기술자 I
미국 시민
완전히 만나다
...
...
...
...
293
본 마센바흐
생산 기술자 II
미국 시민
완전히 만나다
295
월레스
생산 기술자 I
미국 시민
개선 필요
300

생산 기술자 I
자격이 있는 비시민권자
완전히 만나다
308
저우
생산 기술자 I
미국 시민
완전히 만나다
309
지마



여러 열을 지정하고 이전 섹션에서 설명한 모든 유지 매개변수를 사용할 수 있습니다.

df1=df.drop_duplicates(subset="Employee_Name""CitizenDesc"],keep=False)df1


<머리><일>
<트><일>...
직원 이름
위치
시민설명
실적 점수
7
안드레아
소프트웨어 엔지니어
미국 시민
완전히 만나다
16
부리
생산 기술자 I
자격이 있는 비시민권자
완전히 만나다
25
보지
프로덕션 매니저
미국 시민
완전히 만나다
26
브라만테
운영 이사
미국 시민
초과
27
브릴
생산 기술자 I
미국 시민
완전히 만나다
...
...
...
...
287
테제다
네트워크 엔지니어
자격이 있는 비시민권자
완전히 만나다
286
테제다
소프트웨어 엔지니어
비시민권자
완전히 만나다
300

생산 기술자 I
자격이 있는 비시민권자
완전히 만나다
308
저우
생산 기술자 I
미국 시민
완전히 만나다
309
지마



고유() 메소드

고유한 메서드는 시리즈에서 고유한 값을 찾고 고유한 값을 배열로 반환합니다. 이 방법은 누락된 값을 제외하지 않습니다.

len(df["Employee_Name"])

출력

310


df["Employee_Name"].unique()


array(['Adinolfi', 'Anderson', 'Andreola', 'Athwal', 'Beak', 'Bondwell',
'Bozzi', 'Bramante', 'Brill', 'Brown', 'Burkett', 'Butler',
'Carabbio', 'Carey', 'Carr', 'Carter', 'Chace', 'Champaigne',
'Chan', 'Chang', 'Chivukula', 'Cierpiszewski', 'Cisco', 'Clayton',
'Cloninger', 'Close', 'Clukey', 'Cockel', 'Cole', 'Cornett',
'Costa', 'Crimmings', 'Daneault', 'Daniele', 'Darson', 'Davis',
'DeGweck', 'Del Bosque', 'Demita', 'Desimone', 'DiNocco',
'Dickinson', 'Dietrich', 'Digitale', 'Dobrin', 'Dolan', 'Dougall',
'Dunn', 'Eaton', 'Employee_Name', 'Engdahl', 'England', 'Erilus',
'Estremera', 'Evensen', 'Exantus', 'Faller', 'Fancett', 'Favis',
'Ferguson', 'Fernandes', 'Ferreira', 'Fidelia', 'Fitzpatrick',
'Foreman', 'Foss', 'Foster-Baker', 'Fraval', 'Friedman', 'Galia',
'Garcia', 'Garneau', 'Gaul', 'Gentry', 'Gerke', 'Gill', 'Gonzales',
'Gonzalez', 'Good', 'Handschiegl', 'Hankard', 'Harrison',
'Heitzman', 'Horton', 'Houlihan', 'Howard', 'Hubert', 'Hunts',
'Hutter', 'Huynh', 'Immediato', 'Ivey', 'Jackson', 'Jacobi',
'Jeannite', 'Jeremy Prater', 'Jhaveri', 'Johnson', 'Johnston',
'Jung', 'Kampew', 'Keatts', 'Khemmich', 'King', 'Kinsella',
'Kirill', 'Knapp', 'Kretschmer', 'LaRotonda', 'Lajiri', 'Langford',
'Langton', 'Latif', 'Le', 'LeBel', 'LeBlanc', 'Leach', 'Leruth',
'Liebig', 'Linares', 'Linden', 'Lindsay', 'Lundy', 'Lunquist',
'Lydon', 'Lynch', 'MacLennan', 'Mahoney', 'Manchester', 'Mancuso',
'Mangal', 'Martin', 'Martins', 'Maurice', 'McCarthy', 'McKinzie',
'Mckenna', 'Meads', 'Medeiros', 'Merlos', 'Miller', 'Monkfish',
'Monroe', 'Monterro', 'Moran', 'Morway', 'Motlagh', 'Moumanil',
'Mullaney', 'Murray', 'Navathe', 'Ndzi', 'Newman', 'Ngodup',
'Nguyen', 'Nowlan', 'O'hare', 'Oliver', 'Onque', 'Osturnka',
'Owad', 'Ozark', 'Panjwani', 'Patronick', 'Pearson', 'Pelech',
'Pelletier', 'Perry', 'Peters', 'Peterson', 'Petingill',
'Petrowsky', 'Pham', 'Pitt', 'Potts', 'Power', 'Punjabhi',
'Purinton', 'Quinn', 'Rachael', 'Rarrick', 'Rhoads', 'Riordan',
'Rivera', 'Roberson', 'Robertson', 'Robinson', 'Roby', 'Roehrich',
'Rogers', 'Roper', 'Rose', 'Rossetti', 'Roup', 'Ruiz', 'Saada',
'Saar-Beckles', 'Sadki', 'Sahoo', 'Salter', 'Sander', 'Semizoglou',
'Sewkumar', 'Shepard', 'Shields', 'Simard', 'Singh', 'Sloan',
'Smith', 'Soto', 'South', 'Sparks', 'Spirea', 'Squatrito',
'Stanford', 'Stanley', 'Steans', 'Stoica', 'Strong', 'Sullivan',
'Sutwell', 'Sweetwater', 'Szabo', 'Tavares', 'Tejeda', 'Veera',
'Von Massenbach', 'Wallace', 'Wang', 'Zhou', 'Zima'], dtype=object)


len(df["Employee_Name"].unique())

출력

231

.nunique() 메소드

이 메서드는 시리즈에서 고유한 값의 수를 반환합니다. 이 방법은 기본적으로 dropna =True 매개변수를 사용하여 누락된 값을 제외합니다.

누락된 값을 삭제하지 않도록 False 인수를 dropna 매개변수에 전달할 수 있습니다.

df["Employee_Name"].nunique()

출력

231


df["Employee_Name"].nunique(dropna=False)

출력

231