我们说我有以下数据。
df = pd.DataFrame({'group':list('aaaabbbb'),
'val':[1,3,3,np.NaN,5,6,6,2],
'id':[1,np.NaN,np.NaN,np.NaN,np.NaN,3,np.NaN,3]})
df
我想删除NaN值百分比超过50%的列。我可以通过运行以下操作然后使用drop来手动完成。
df.isnull().sum()/len(df)*100
但是,我想知道是否有一个优雅而快速的代码来执行此操作?
答案 0 :(得分:7)
可以使用dropna的thresh
参数。
df.dropna(axis=1, thresh=int(0.5*len(df)))
答案 1 :(得分:5)
将mean
与boolean indexing
一起使用以删除列:
print (df.isnull().mean() * 100)
group 0.0
id 62.5
val 12.5
dtype: float64
df1 = df.loc[:, df.isnull().mean() <= .5]
print (df1)
group val
0 a 1.0
1 a 3.0
2 a 3.0
3 a NaN
4 b 5.0
5 b 6.0
6 b 6.0
7 b 2.0
答案 2 :(得分:5)
df.dropna(thresh=len(df)//2,axis=1)
Out[57]:
group val
0 a 1.0
1 a 3.0
2 a 3.0
3 a NaN
4 b 5.0
5 b 6.0
6 b 6.0
7 b 2.0