পান্ডস ডেটাফ্রেমে কোন কলামগুলিতে কোনও NaN মান রয়েছে তা কীভাবে সন্ধান করবেন


144

এখানে এবং সেখানে ছড়িয়ে ছিটিয়ে থাকা সম্ভাব্য NaN মানযুক্ত একটি পান্ডাস ডেটাফ্রেম দেওয়া হয়েছে:

প্রশ্ন: কোন কলামগুলিতে NaN মান রয়েছে তা আমি কীভাবে নির্ধারণ করব? বিশেষত, আমি কি এনএএনএস সহ কলামের নামের একটি তালিকা পেতে পারি?


5
df.isna().any()[lambda x: x]আমার জন্য কাজ করে
ম্যাটানস্টার

উত্তর:


249

আপডেট: পান্ডাস 0.22.0 ব্যবহার করে

নতুন পান্ডা সংস্করণগুলিতে নতুন পদ্ধতি রয়েছে 'ডেটাফ্রেম.আইসনা ()' এবং 'ডেটা ফ্রেম.ন্টনা ()'

In [71]: df
Out[71]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [72]: df.isna().any()
Out[72]:
a     True
b     True
c    False
dtype: bool

কলামের তালিকা হিসাবে:

In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']

এই কলামগুলি নির্বাচন করতে (কমপক্ষে একটি NaNমান রয়েছে):

In [73]: df.loc[:, df.isna().any()]
Out[73]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

পুরানো উত্তর:

ইসনুল () ব্যবহার করার চেষ্টা করুন :

In [97]: df
Out[97]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [98]: pd.isnull(df).sum() > 0
Out[98]:
a     True
b     True
c    False
dtype: bool

বা @ মূল প্রস্তাবিত ক্লিয়ারার সংস্করণ হিসাবে:

In [5]: df.isnull().any()
Out[5]:
a     True
b     True
c    False
dtype: bool

In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']

একটি উপসেট নির্বাচন করতে - কমপক্ষে একটি মানযুক্ত সমস্ত কলাম NaN:

In [31]: df.loc[:, df.isnull().any()]
Out[31]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

উত্তরের জন্য ধন্যবাদ! আমি কলামের নামের তালিকা পেতে চাই (আমি সে অনুযায়ী আমার প্রশ্নটি আপডেট করেছি), কীভাবে জানেন?
Denvar

নাল মানগুলির পরিবর্তে একটি নির্দিষ্ট মান সহ সমস্ত কলামগুলি নির্বাচন করার কোনও উপায় আপনি কি জানেন?
gregorio099

1
কিছু মনে করো না! কেবলমাত্র () .isin ([ 'XXX']) NULLs পরিবর্তে মান জন্য অনুসন্ধান করতে সঙ্গে .isnull প্রতিস্থাপন করুন:df.columns[df.isin['xxx'].any()].tolist()
gregorio099

@ df.columns[df.eq(search_for_value).any()].tolist()
গ্রেগরিও0৯৯

1
ভাল উত্তর, ইতিমধ্যে upvated। আইডিয়া - আপনি নতুন ফাংশন যোগ করতে পারেন isna, notna ?
jezrael

26

আপনি ব্যবহার করতে পারেন df.isnull().sum()। এটি প্রতিটি বৈশিষ্ট্যের সমস্ত কলাম এবং মোট NaN দেখায়।


8

আমার একটি সমস্যা হয়েছিল যেখানে আমার কাছে অনেকগুলি কলাম দৃশ্যমানভাবে স্ক্রিনে পরিদর্শন করতে হয়েছিল তাই একটি সংক্ষিপ্ত তালিকা কম্পম্প যা আপত্তিজনক কলামগুলি ফিল্টার করে এবং ফেরত দেয়

nan_cols = [i for i in df.columns if df[i].isnull().any()]

যদি এটি কারও সহায়ক হয়


4

কতগুলি কলামগুলিতে নাল মান রয়েছে এবং কতগুলি না করে তা আরও বেশি কলামযুক্ত ডেটাসেটগুলিতে এটি আরও ভাল।

print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))

print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))

print("Total no. of columns in the dataframe")
print(len(df.columns))

উদাহরণস্বরূপ আমার ডেটাফ্রেমে এটিতে 82২ টি কলাম রয়েছে যার মধ্যে ১৯ টিতে কমপক্ষে একটি নাল মান রয়েছে।

আরও আপনি স্বয়ংক্রিয়ভাবে কলস এবং সারিগুলি সরিয়ে ফেলতে পারেন যার উপর নির্ভর করে আরও নাল মান রয়েছে
এখানে কোডটি যা বুদ্ধিমানভাবে এটি করে:

df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)

দ্রষ্টব্য: উপরের কোডটি আপনার সমস্ত নাল মানকে সরিয়ে দেয়। আপনি যদি নাল মান চান তবে তাদের আগে প্রক্রিয়া করুন।


2

আমি এই তিনটি লাইন কোডটি কলামের নামগুলি মুদ্রণের জন্য ব্যবহার করি যাতে কমপক্ষে একটি নাল মান থাকে:

for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))

2

এই উভয়েরই কাজ করা উচিত:

df.isnull().sum()
df.isna().sum()

ডেটা ফ্রেম পদ্ধতিগুলি isna()বা isnull()সম্পূর্ণ অভিন্ন।

দ্রষ্টব্য : খালি স্ট্রিংগুলি ''মিথ্যা হিসাবে বিবেচিত হবে (এনএ হিসাবে বিবেচিত হবে না)


1

এটি আমার পক্ষে কাজ করেছে,

1. কমপক্ষে কমপক্ষে 1 টি নাল মানযুক্ত কলামগুলি পাওয়ার জন্য। (কলামের নাম)

data.columns[data.isnull().any()]

২. কমপক্ষে কমপক্ষে ১ টি নাল মান সহ কলামগুলি পাওয়ার জন্য।

data[data.columns[data.isnull().any()]].isnull().sum()

[Ptionচ্ছিক] ৩. নাল গণনার শতাংশ পাওয়ার জন্য।

data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]

একাধিক পদ্ধতির জন্য ধন্যবাদ!
মাইক রাপাদাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.