Đô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()]
| 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 | Nhà phân tích dữ liệu | 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)]
| 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 | Nhà phân tích dữ liệu | 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