.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.
। कोई इसे और अधिक स्पष्ट रूप से और उस चेतावनी संदेश को ट्रिगर नहीं करता है इस तरह से कैसे फिर से लिखता है?