python tutorial ডেটাফ্রেমের জন্য এনএএন শতাংশ অনুযায়ী কলাম কীভাবে ড্রপ করবেন?




python wiki (3)

df নির্দিষ্ট কলামগুলির জন্য, যদি কলামের 80% NAN

এই জাতীয় কলাম ড্রপ করার সবচেয়ে সহজ কোডটি কী?


আপনি isnull সাথে isnull ব্যবহার করতে পারেন এবং তারপরে isnull সাহায্যে boolean indexing করে কলামগুলি সরিয়ে ফেলতে পারেন (কারণ কলামগুলি সরান), এছাড়াও বিপরীত শর্ত প্রয়োজন - সুতরাং <.8 মানে সমস্ত কলামগুলি সরান >=0.8 :

df = df.loc[:, df.isnull().mean() < .8]

নমুনা:

np.random.seed(100)
df = pd.DataFrame(np.random.random((100,5)), columns=list('ABCDE'))
df.loc[:80, 'A'] = np.nan
df.loc[:5, 'C'] = np.nan
df.loc[20:, 'D'] = np.nan

print (df.isnull().mean())
A    0.81
B    0.00
C    0.06
D    0.80
E    0.00
dtype: float64

df = df.loc[:, df.isnull().mean() < .8]
print (df.head())
         B   C         E
0  0.278369 NaN  0.004719
1  0.670749 NaN  0.575093
2  0.209202 NaN  0.219697
3  0.811683 NaN  0.274074
4  0.940030 NaN  0.175410

ন্যূনতম মান দ্বারা কলামগুলি অপসারণ করতে চাইলে পরামিতি dropna এবং axis=1 কলামগুলি অপসারণের জন্য সুন্দর কাজ করছে:

np.random.seed(1997)
df = pd.DataFrame(np.random.choice([np.nan,1], p=(0.8,0.2),size=(10,10)))
print (df)
     0   1    2    3    4    5    6    7   8    9
0  NaN NaN  NaN  1.0  1.0  NaN  NaN  NaN NaN  NaN
1  1.0 NaN  1.0  NaN  NaN  NaN  NaN  NaN NaN  NaN
2  NaN NaN  NaN  NaN  NaN  1.0  1.0  NaN NaN  NaN
3  NaN NaN  NaN  NaN  1.0  NaN  NaN  NaN NaN  NaN
4  NaN NaN  NaN  NaN  NaN  1.0  NaN  NaN NaN  1.0
5  NaN NaN  NaN  1.0  1.0  NaN  NaN  1.0 NaN  1.0
6  NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN NaN  NaN
7  NaN NaN  NaN  NaN  NaN  NaN  NaN  NaN NaN  NaN
8  NaN NaN  NaN  NaN  NaN  NaN  NaN  1.0 NaN  NaN
9  1.0 NaN  NaN  NaN  1.0  NaN  NaN  1.0 NaN  NaN

df1 = df.dropna(thresh=2, axis=1)
print (df1)
     0    3    4    5    7    9
0  NaN  1.0  1.0  NaN  NaN  NaN
1  1.0  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  1.0  NaN  NaN
3  NaN  NaN  1.0  NaN  NaN  NaN
4  NaN  NaN  NaN  1.0  NaN  1.0
5  NaN  1.0  1.0  NaN  1.0  1.0
6  NaN  NaN  NaN  NaN  NaN  NaN
7  NaN  NaN  NaN  NaN  NaN  NaN
8  NaN  NaN  NaN  NaN  1.0  NaN
9  1.0  NaN  1.0  NaN  1.0  NaN

সম্পাদনা: নন-বুলিয়ান ডেটার জন্য

একটি কলামে NaN প্রবেশের মোট সংখ্যা অবশ্যই মোট এন্ট্রিগুলির 80% এর কম হতে হবে:

 df = df.loc[:, df.isnull().sum() < 0.8*df.shape[0]]

মন্তব্যে প্রস্তাবিত হিসাবে, আপনি যদি বুলিয়ান পরীক্ষায় sum() ব্যবহার করেন তবে আপনি উপস্থিতির সংখ্যা পেতে পারেন।

কোড:

def get_nan_cols(df, nan_percent=0.8):
    threshold = len(df.index) * nan_percent
    return [c for c in df.columns if sum(df[c].isnull()) >= threshold]  

হিসাবে ব্যবহার:

del df[get_nan_cols(df, 0.8)]

df.dropna(thresh=np.int((100-percent_NA_cols_required)*(len(df.columns)/100)),inplace=True)

মূলত পিডি.ড্রপোনা নন_না কলসের সংখ্যা (ইন্ট) নেয় যদি সেই সারিটি সরিয়ে ফেলা হয়।





nan