डेटा विश्लेषण के दौरान कई बार हमें डुप्लिकेट पंक्तियों को तुरंत हटाने के बजाय उन्हें समझने की आवश्यकता होती है। Pandas में डुप्लिकेट के साथ काम करने के लिए कई उपयोगी मेथड उपलब्ध हैं।
.duplicated() मेथड
यह मेथड DataFrame में डुप्लिकेट पंक्तियों को निकालने की अनुमति देता है। हम डुप्लिकेट वाले एक नए डेटासेट का उपयोग करेंगे। मैंने यहां से HR डेटासेट डाउनलोड किया है।
import pandas as pd
import numpy as np
# केवल आवश्यक कॉलम के साथ HR डेटासेट आयात करें
df = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/HRDataset.csv",
usecols=["Employee_Name", "PerformanceScore", "Position", "CitizenDesc"])
# कर्मचारी नाम के अनुसार सॉर्ट करें और स्थायी बनाएं
df.sort_values("Employee_Name", inplace=True)
df.head(3)
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 0 | Adinolfi | Production Technician I | US Citizen | Exceeds |
| 1 | Adinolfi | Sr. DBA | US Citizen | Fully Meets |
| 2 | Adinolfi | Production Technician II | US Citizen | Fully Meets |
duplicated() मेथड डिफ़ॉल्ट रूप से keep पैरामीटर के आधार पर काम करता है। यह पैरामीटर प्रत्येक मान की पहली घटना को नॉन-डुप्लिकेट के रूप में चिह्नित करता है। यह मेथड किसी पंक्ति को डुप्लिकेट के रूप में चिह्नित नहीं करता यदि वह एक से अधिक बार मौजूद है, बल्कि पहली पंक्ति के बाद की प्रत्येक बाद की पंक्ति को डुप्लिकेट के रूप में चिह्नित करता है।
उदाहरण के लिए, यदि टोकरी में 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
अब डुप्लिकेट निकालने के लिए (याद रखें पहली घटना डुप्लिकेट नहीं है बल्कि बाद की घटनाएं डुप्लिकेट हैं और इस मेथड द्वारा आउटपुट की जाएंगी), हमें इस मेथड को DataFrame पर पास करना होगा।
df.shape
(310, 4)
df[df["Employee_Name"].duplicated()]
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 1 | Adinolfi | Sr. DBA | US Citizen | Fully Meets |
| 2 | Adinolfi | Production Technician II | US Citizen | Fully Meets |
| 3 | Adinolfi | Production Technician I | US Citizen | Fully Meets |
| 4 | Adinolfi | Production Manager | US Citizen | Fully Meets |
| 6 | Anderson | Production Technician I | US Citizen | Exceeds |
| ... | ... | ... | ... | ... |
| 303 | Wang | Production Technician II | US Citizen | Fully Meets |
| 304 | Wang | Production Technician II | US Citizen | Fully Meets |
| 305 | Wang | Production Technician I | US Citizen | PIP |
| 306 | Wang | CIO | US Citizen | Exceeds |
| 307 | Wang | Data Analyst | US Citizen | Fully Meets |
79 rows × 4 columns
उपरोक्त आउटपुट से पता चलता है कि 310 पंक्तियों में 79 डुप्लिकेट हैं जिन्हें .duplicated() मेथड द्वारा निकाला गया है।
आर्गुमेंट - "last"
डिफ़ॉल्ट रूप से यह मेथड मान की पहली घटना को नॉन-डुप्लिकेट के रूप में चिह्नित करता है। हम keep="last" आर्गुमेंट पास करके इस व्यवहार को बदल सकते हैं।
यह पैरामीटर पहले दो सेबों को डुप्लिकेट और अंतिम को नॉन-डुप्लिकेट के रूप में चिह्नित करेगा।
df[df["Employee_Name"].duplicated(keep="last")]
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 0 | Adinolfi | Production Technician I | US Citizen | Exceeds |
| 1 | Adinolfi | Sr. DBA | US Citizen | Fully Meets |
| 2 | Adinolfi | Production Technician II | US Citizen | Fully Meets |
| 3 | Adinolfi | Production Technician I | US Citizen | Fully Meets |
| 5 | Anderson | Production Technician I | US Citizen | Fully Meets |
| ... | ... | ... | ... | ... |
| 302 | Wang | Production Technician II | US Citizen | Exceeds |
| 303 | Wang | Production Technician II | US Citizen | Fully Meets |
| 304 | Wang | Production Technician II | US Citizen | Fully Meets |
| 305 | Wang | Production Technician I | US Citizen | PIP |
| 306 | Wang | CIO | US Citizen | Exceeds |
आर्गुमेंट - False
keep पैरामीटर एक अतिरिक्त आर्गुमेंट False भी स्वीकार करता है जो एक से अधिक बार आने वाले सभी मानों को डुप्लिकेट के रूप में चिह्नित करेगा। हमारे मामले में सभी 3 सेब डुप्लिकेट के रूप में चिह्नित होंगे, न कि केवल पहला या अंतिम।
नोट – False पैरामीटर निर्दिष्ट करते समय कोट्स का उपयोग न करें।
df[df["Employee_Name"].duplicated(keep=False)]
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 0 | Adinolfi | Production Technician I | US Citizen | Exceeds |
| 1 | Adinolfi | Sr. DBA | US Citizen | Fully Meets |
| 2 | Adinolfi | Production Technician II | US Citizen | Fully Meets |
| 3 | Adinolfi | Production Technician I | US Citizen | Fully Meets |
| 4 | Adinolfi | Production Manager | US Citizen | Fully Meets |
| ... | ... | ... | ... | ... |
| 303 | Wang | Production Technician II | US Citizen | Fully Meets |
| 304 | Wang | Production Technician II | US Citizen | Fully Meets |
| 305 | Wang | Production Technician I | US Citizen | PIP |
| 306 | Wang | CIO | US Citizen | Exceeds |
| 307 | Wang | Data Analyst | US Citizen | Fully Meets |
अंत में, डेटासेट से यूनिक मान निकालने के लिए हम ~ (टिल्डा) सिंबल का उपयोग करके मानों को निगेट कर सकते हैं।
df_unique = ~df["Employee_Name"].duplicated(keep=False)
df[df_unique]
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 7 | Andreola | Software Engineer | US Citizen | Fully Meets |
| 25 | Bozzi | Production Manager | US Citizen | Fully Meets |
| 26 | Bramante | Director of Operations | US Citizen | Exceeds |
| 27 | Brill | Production Technician I | US Citizen | Fully Meets |
| 34 | Burkett | Production Technician II | US Citizen | Fully Meets |
| ... | ... | ... | ... | ... |
| 276 | Sweetwater | Software Engineer | US Citizen | Exceeds |
| 277 | Szabo | Production Technician I | Non-Citizen | Fully Meets |
| 278 | Tavares | Production Technician II | US Citizen | Fully Meets |
| 308 | Zhou | Production Technician I | US Citizen | Fully Meets |
| 309 | Zima | NaN | NaN | NaN |
drop_duplicates() मेथड
यह मेथड पिछले मेथड के समान है, लेकिन यह एक सीरीज के बजाय DataFrame पर लागू किया जा सकता है।
नोट: यह मेथड DataFrame के सभी कॉलम पर डुप्लिकेट पंक्तियों को खोजता है और उन्हें हटाता है।
len(df)
310
len(df.drop_duplicates())
290
सबसेट पैरामीटर
subset पैरामीटर स्ट्रिंग मान के रूप में कॉलम नामों की एक सूची स्वीकार करता है जिसमें हम डुप्लिकेट की जांच कर सकते हैं।
df1 = df.drop_duplicates(subset=["Employee_Name"], keep="first")
df1
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 0 | Adinolfi | Production Technician I | US Citizen | Exceeds |
| 5 | Anderson | Production Technician I | US Citizen | Fully Meets |
| 7 | Andreola | Software Engineer | US Citizen | Fully Meets |
| 14 | Athwal | Production Technician I | US Citizen | Fully Meets |
| 20 | Beak | Production Technician I | US Citizen | Fully Meets |
| ... | ... | ... | ... | ... |
| 293 | Von Massenbach | Production Technician II | US Citizen | Fully Meets |
| 295 | Wallace | Production Technician I | US Citizen | Needs Improvement |
| 300 | Wang | Production Technician I | Eligible NonCitizen | Fully Meets |
| 308 | Zhou | Production Technician I | US Citizen | Fully Meets |
| 309 | Zima | NaN | NaN | NaN |
हम कई कॉलम निर्दिष्ट कर सकते हैं और पिछले खंड में चर्चा किए गए सभी keep पैरामीटर्स का उपयोग कर सकते हैं।
df1 = df.drop_duplicates(subset=["Employee_Name", "CitizenDesc"], keep=False)
df1
| Employee_Name | Position | CitizenDesc | PerformanceScore | |
|---|---|---|---|---|
| 7 | Andreola | Software Engineer | US Citizen | Fully Meets |
| 16 | Beak | Production Technician I | Eligible NonCitizen | Fully Meets |
| 25 | Bozzi | Production Manager | US Citizen | Fully Meets |
| 26 | Bramante | Director of Operations | US Citizen | Exceeds |
| 27 | Brill | Production Technician I | US Citizen | Fully Meets |
| ... | ... | ... | ... | ... |
| 287 | Tejeda | Network Engineer | Eligible NonCitizen | Fully Meets |
| 286 | Tejeda | Software Engineer | Non-Citizen | Fully Meets |
| 300 | Wang | Production Technician I | Eligible NonCitizen | Fully Meets |
| 308 | Zhou | Production Technician I | US Citizen | Fully Meets |
| 309 | Zima | NaN | NaN | NaN |
unique() मेथड
unique मेथड एक सीरीज में यूनिक मान ढूंढता है और उन्हें एक ऐरे के रूप में लौटाता है। यह मेथड मिसिंग मानों को बाहर नहीं करता।
len(df["Employee_Name"])
310
df["Employee_Name"].unique()
array(['Adinolfi', 'Anderson', 'Andreola', ..., 'Zhou', 'Zima'], dtype=object)
len(df["Employee_Name"].unique())
231
.nunique() मेथड
यह मेथड एक सीरीज में यूनिक मानों की संख्या लौटाता है। यह मेथड डिफ़ॉल्ट रूप से dropna=True पैरामीटर का उपयोग करके मिसिंग मानों को बाहर करता है।
आप dropna पैरामीटर में False पास करके मिसिंग मानों को शामिल कर सकते हैं।
df["Employee_Name"].nunique()
231
df["Employee_Name"].nunique(dropna=False)
231