ডেটা বিশ্লেষণের সময় অনেকগুলো ক্ষেত্রে আমাদের ডুপ্লিকেট সারিগুলো শনাক্ত করতে হয় যাতে ডেটার Bản질을 আরও ভালোভাবে বোঝা যায়, সেগুলো সরাসরি ড্রপ না করে। পান্ডাসে ডুপ্লিকেট হ্যান্ডেল করার জন্য বেশ কিছু কার্যকর মেথড রয়েছে।
.duplicated() মেথড
এই মেথডটি একটি ডেটাফ্রেম থেকে ডুপ্লিকেট সারিগুলো বের করতে সাহায্য করে। এখানে একটি ডেমো ডেটাসেট ব্যবহার করা হয়েছে যাতে ডুপ্লিকেট রয়েছে। HR ডেটাসেটটি GitHub থেকে লোড করা হয়েছে।
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 প্যারামিটার ব্যবহার করে প্রতিটি ভ্যালুর প্রথম অভिज্ঞতাকে নন-ডুপ্লিকেট হিসেবে চিহ্নিত করে। অর্থাৎ, যদি একই ভ্যালু একাধিকবার থাকে, তবে প্রথমটিকে ছাড়া বাকিগুলোকে ডুপ্লিকেট হিসেবে মার্ক করা হয়। উদাহরণস্বরূপ, যদি একটি বাস্কেটে ৩টি আপেল থাকে, তবে প্রথম আপেলটি নন-ডুপ্লিকেট এবং বাকি দুটি ডুপ্লিকেট হিসেবে চিহ্নিত হবে।
উদাহরণ
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()]
আউটপুট: ৭৯ সারি × ৪ কলাম (মোট ৩১০ সারির মধ্যে ৭৯টি ডুপ্লিকেট বের হয়েছে)।
আর্গুমেন্ট - "last"
ডিফল্টভাবে প্রথম অভিজ্ঞতা নন-ডুপ্লিকেট হিসেবে বিবেচনা হয়। keep="last" আর্গুমেন্ট দিয়ে এই আচরণ পরিবর্তন করা যায়। এতে শেষ অভিজ্ঞতা নন-ডুপ্লিকেট হয়ে যায় এবং তার আগের সবগুলো ডুপ্লিকেট হিসেবে মার্ক হয়।
df[df["Employee_Name"].duplicated(keep="last")]
আর্গুমেন্ট - False
keep=False প্যারামিটার ব্যবহার করলে একাধিকবার আসা সব ভ্যালু ডুপ্লিকেট হিসেবে চিহ্নিত হয় (প্রথম বা শেষ কোনটিই নন-ডুপ্লিকেট নয়)। দ্রষ্টব্য: False প্যারামিটার দিতে কোটেশন ব্যবহার করা যাবে না।
df[df["Employee_Name"].duplicated(keep=False)]
ইউনিক ভ্যালু বের করতে ~ (টিল্ডা) চিহ্ন ব্যবহার করে নেগেট করা যায়।
df_unique = ~df["Employee_Name"].duplicated(keep=False) df[df_unique]
drop_duplicates() মেথড
এই মেথডটি duplicated()-এর মতোই কাজ করে কিন্তু এটি সরাসরি ডেটাফ্রেমে প্রয়োগ করা যায়। গুরুত্বপূর্ণ: ডিফল্টভাবে এটি সমস্ত কলাম বিবেচনা করে পুরো সারি ডুপ্লিকেট হলে সেটি ড্রপ করে।
len(df)
310
len(df.drop_duplicates())
290
subset প্যারামিটার
subset প্যারামিটার দিয়ে নির্দিষ্ট কলাম(গুল)র ভিত্তিতে ডুপ্লিকেট চেক করা যায়।
df1 = df.drop_duplicates(subset=["Employee_Name"], keep="first") df1
এছাড়া একাধিক কলাম ও 앞서 বর্ণিত সব keep প্যারামিটার ব্যবহার করা যায়।
df1 = df.drop_duplicates(subset=["Employee_Name", "CitizenDesc"], keep=False) df1
unique() মেথড
এই মেথডটি একটি সিরিজ থেকে ইউনিক ভ্যালুগুলো অ্যারে হিসেবে রিটার্ন করে। এটি মিসিং ভ্যালু বাদ দেয় না।
len(df["Employee_Name"])
310
df["Employee_Name"].unique()
(বড় অ্যারে আউটপুট প্রদর্শন করা হয়নি)
len(df["Employee_Name"].unique())
231
nunique() মেথড
এই মেথডটি সিরিজে কতগুলো ইউনিক ভ্যালু আছে তা রিটার্ন করে। ডিফল্টভাবে dropna=True থাকায় মিসিং ভ্যালু বাদ দেয়। dropna=False দিলে মিসিং ভ্যালুও গণনায় আসবে।
df["Employee_Name"].nunique()
231
df["Employee_Name"].nunique(dropna=False)
231