丢弃具有高NaN值百分比的Pandas列

时间:2018-03-15 14:45:10

标签: python pandas

我们说我有以下数据。

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

但是,我想知道是否有一个优雅而快速的代码来执行此操作?

3 个答案:

答案 0 :(得分:7)

可以使用dropna的thresh参数。

df.dropna(axis=1, thresh=int(0.5*len(df)))

答案 1 :(得分:5)

meanboolean 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