.any()
এবং .all()
চরম ক্ষেত্রে ক্ষেত্রে দুর্দান্ত তবে আপনি যখন একটি নির্দিষ্ট সংখ্যক নাল মান খুঁজছেন তখন তা নয়। আপনি যা জিজ্ঞাসা করছেন তা আমি বিশ্বাস করি এমন করার একটি অত্যন্ত সহজ উপায়। এটি বেশ ভার্জোজ, তবে কার্যকরী।
import pandas as pd
import numpy as np
# Some test data frame
df = pd.DataFrame({'num_legs': [2, 4, np.nan, 0, np.nan],
'num_wings': [2, 0, np.nan, 0, 9],
'num_specimen_seen': [10, np.nan, 1, 8, np.nan]})
# Helper : Gets NaNs for some row
def row_nan_sums(df):
sums = []
for row in df.values:
sum = 0
for el in row:
if el != el: # np.nan is never equal to itself. This is "hacky", but complete.
sum+=1
sums.append(sum)
return sums
# Returns a list of indices for rows with k+ NaNs
def query_k_plus_sums(df, k):
sums = row_nan_sums(df)
indices = []
i = 0
for sum in sums:
if (sum >= k):
indices.append(i)
i += 1
return indices
# test
print(df)
print(query_k_plus_sums(df, 2))
আউটপুট
num_legs num_wings num_specimen_seen
0 2.0 2.0 10.0
1 4.0 0.0 NaN
2 NaN NaN 1.0
3 0.0 0.0 8.0
4 NaN 9.0 NaN
[2, 4]
তারপরে, আপনি যদি আমার মতো হন এবং এই সারিগুলি সরিয়ে দিতে চান তবে আপনি কেবল এটি লিখুন:
# drop the rows from the data frame
df.drop(query_k_plus_sums(df, 2),inplace=True)
# Reshuffle up data (if you don't do this, the indices won't reset)
df = df.sample(frac=1).reset_index(drop=True)
# print data frame
print(df)
আউটপুট:
num_legs num_wings num_specimen_seen
0 4.0 0.0 NaN
1 0.0 0.0 8.0
2 2.0 2.0 10.0
df[df.isnull().any(axis=1)]
কাজ কিন্তু ছোঁড়ারUserWarning: Boolean Series key will be reindexed to match DataFrame index.
। কীভাবে একজন আরও স্পষ্টভাবে এবং এমন এক উপায়ে পুনর্লিখন করে যাতে এই সতর্কতা বার্তাটি ট্রিগার করে না?