Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để tìm và lọc các hàng trùng lặp trong Gấu trúc?

Đôi khi trong quá trình phân tích dữ liệu, chúng tôi cần xem xét các hàng trùng lặp để hiểu thêm về dữ liệu của mình thay vì loại bỏ chúng ngay lập tức.

May mắn thay, ở gấu trúc, chúng tôi có một số phương pháp để xử lý các bản sao.

.duplciated ()

Phương pháp này cho phép chúng tôi trích xuất các hàng trùng lặp trong DataFrame. Chúng tôi sẽ sử dụng một tập dữ liệu mới với các bản sao. Tôi đã tải xuống Tập dữ liệu Hr từ liên kết.

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)



Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
0
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Vượt quá
1
Adinolfi
Sr. DBA
Công dân Hoa Kỳ
Đáp ứng đầy đủ
2
Adinolfi
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ


Theo mặc định, cách hoạt động của Duplicated () là theo tham số keep, Tham số này sẽ đánh dấu lần xuất hiện đầu tiên của mỗi giá trị là không trùng lặp.

Phương thức này không đánh dấu một hàng là trùng lặp nếu nó tồn tại nhiều hơn một lần, thay vào đó nó đánh dấu mỗi hàng tiếp theo sau hàng đầu tiên là trùng lặp. Bối rối? Hãy để tôi giải thích một lần nữa bằng một ví dụ, giả sử có 3 quả táo trong một giỏ, phương pháp này thực hiện là đánh dấu quả táo đầu tiên là không trùng lặp và phần còn lại của hai quả táo là trùng lặp.

Ví dụ

df["Employee_Name"].head(3)

Đầu ra

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

Ví dụ

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

Đầu ra

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

Bây giờ để trích xuất các bản sao (hãy nhớ lần xuất hiện đầu tiên không phải là bản sao thay vì lần xuất hiện sau là bản sao và sẽ được xuất ra bằng phương thức này), chúng ta cần chuyển phương thức này vào một khung dữ liệu.

df.shape


(310, 4)


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


Nhà phân tích dữ liệu

Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
1
Adinolfi
Sr. DBA
Công dân Hoa Kỳ
Đáp ứng đầy đủ
2
Adinolfi
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
3
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
4
Adinolfi
Giám đốc sản xuất
Công dân Hoa Kỳ
Đáp ứng đầy đủ
6
Anderson
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Vượt quá
...
...
...
...
...
303
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
304
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
305
Wang
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
PIP
306
Wang
CIO
Công dân Hoa Kỳ
Vượt quá
307
Wang

Công dân Hoa Kỳ
Đáp ứng đầy đủ

79 hàng × 4 cột

Từ kết quả đầu ra ở trên, có 310 hàng với 79 bản sao được trích xuất bằng cách sử dụng phương thức .duplicated ().

ARGUMENT- "CUỐI CÙNG"

Theo mặc định, phương thức này sẽ đánh dấu lần xuất hiện đầu tiên của giá trị là không trùng lặp, chúng ta có thể thay đổi hành vi này bằng cách chuyển đối số keep =last.

Những gì thông số này sẽ làm là đánh dấu hai quả táo đầu tiên là trùng lặp và quả cuối cùng là không trùng lặp.

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



Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
0
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Vượt quá
1
Adinolfi
Sr. DBA
Công dân Hoa Kỳ
Đáp ứng đầy đủ
2
Adinolfi
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
3
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
5
Anderson
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
...
...
...
...
...
302
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Vượt quá
303
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
304
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
305
Wang
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
PIP
306
Wang
CIO
Công dân Hoa Kỳ
Vượt quá

BIỆN LUẬN - SAI

Tham số keep cũng sẽ chấp nhận một đối số bổ sung "false" sẽ đánh dấu tất cả các giá trị xảy ra nhiều lần là trùng lặp, trong trường hợp của chúng tôi, tất cả 3 quả táo sẽ được đánh dấu là trùng lặp thay vì đầu tiên hoặc cuối cùng như được hiển thị trong các ví dụ trên.

Lưu ý - Khi chỉ định tham số sai, không sử dụng dấu ngoặc kép.

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


Nhà phân tích dữ liệu

Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
0
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Vượt quá
1
Adinolfi
Sr. DBA
Công dân Hoa Kỳ
Đáp ứng đầy đủ
2
Adinolfi
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
3
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
4
Adinolfi
Giám đốc sản xuất
Công dân Hoa Kỳ
Đáp ứng đầy đủ
...
...
...
...
...
303
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
304
Wang
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
305
Wang
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
PIP
306
Wang
CIO
Công dân Hoa Kỳ
Vượt quá
307
Wang

Công dân Hoa Kỳ
Đáp ứng đầy đủ

Cuối cùng, để trích xuất các giá trị duy nhất từ ​​tập dữ liệu, chúng ta có thể sử dụng ký hiệu “~” (dấu ngã) để phủ định các giá trị

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



Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
7
Andreola
Kỹ sư phần mềm
Công dân Hoa Kỳ
Đáp ứng đầy đủ
25
Bozzi
Giám đốc sản xuất
Công dân Hoa Kỳ
Đáp ứng đầy đủ
26
Bramante
Giám đốc Điều hành
Công dân Hoa Kỳ
Vượt quá
27
Brill
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
34
Burkett
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
...
...
...
...
...
276
Nước ngọt
Kỹ sư phần mềm
Công dân Hoa Kỳ
Vượt quá
277
Szabo
Kỹ thuật viên Sản xuất I
Không phải công dân
Đáp ứng đầy đủ
278
Tavares
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
308
Zhou
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
309
Zima
NaN
NaN
NaN

drop_duplicates ()

Phương pháp này khá giống với phương pháp trước, tuy nhiên phương pháp này có thể nằm trên DataFrame chứ không phải trên một chuỗi đơn lẻ.

LƯU Ý:- Phương pháp này tìm kiếm các hàng trùng lặp trên tất cả các cột của DataFrame và loại bỏ chúng.

len(df)

Đầu ra

310


len(df.drop_duplicates())

Đầu ra

290

THÔNG SỐ PHỤ KIỆN

Tham số tập hợp con chấp nhận danh sách tên cột dưới dạng giá trị chuỗi mà chúng tôi có thể kiểm tra các bản sao.

df1=df.drop_duplicates(subset=["Employee_Name"],keep="first")df1

Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
0
Adinolfi
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Vượt quá
5
Anderson
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
7
Andreola
Kỹ sư phần mềm
Công dân Hoa Kỳ
Đáp ứng đầy đủ
14
Athwal
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
20
Beak
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
...
...
...
...
...
293
Von Massenbach
Kỹ thuật viên Sản xuất II
Công dân Hoa Kỳ
Đáp ứng đầy đủ
295
Wallace
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Cần Cải thiện
300
Wang
Kỹ thuật viên Sản xuất I
NonCitizen Đủ điều kiện
Đáp ứng đầy đủ
308
Zhou
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
309
Zima
NaN
NaN
NaN

Chúng tôi có thể chỉ định nhiều cột và sử dụng tất cả các tham số giữ được thảo luận trong phần trước.

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



Tên_nhân viên
Chức vụ
CitizenDesc
PerformanceScore
7
Andreola
Kỹ sư phần mềm
Công dân Hoa Kỳ
Đáp ứng đầy đủ
16
Beak
Kỹ thuật viên Sản xuất I
NonCitizen Đủ điều kiện
Đáp ứng đầy đủ
25
Bozzi
Giám đốc sản xuất
Công dân Hoa Kỳ
Đáp ứng đầy đủ
26
Bramante
Giám đốc Điều hành
Công dân Hoa Kỳ
Vượt quá
27
Brill
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
...
...
...
...
...
287
Tejeda
Kỹ sư mạng
NonCitizen Đủ điều kiện
Đáp ứng đầy đủ
286
Tejeda
Kỹ sư phần mềm
Không phải công dân
Đáp ứng đầy đủ
300
Wang
Kỹ thuật viên Sản xuất I
NonCitizen Đủ điều kiện
Đáp ứng đầy đủ
308
Zhou
Kỹ thuật viên Sản xuất I
Công dân Hoa Kỳ
Đáp ứng đầy đủ
309
Zima
NaN
NaN
NaN

Phương thức unique ()

Các phương thức duy nhất tìm các giá trị duy nhất trong một chuỗi và trả về các giá trị duy nhất dưới dạng một Mảng. Phương pháp này không loại trừ các giá trị bị thiếu.

len(df["Employee_Name"])

Đầu ra

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())

Đầu ra

231

.nunique () Phương thức

Phương thức này trả về số lượng giá trị duy nhất trong một chuỗi. Theo mặc định, phương pháp này loại trừ các giá trị bị thiếu bằng cách sử dụng tham số dropna =True.

Bạn có thể chuyển đối số False vào tham số dropna để không giảm các giá trị bị thiếu.

df["Employee_Name"].nunique()

Đầu ra

231


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

Đầu ra

231