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

ATM*_*TMA 2 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    
Run Code Online (Sandbox Code Playgroud)

我想删除NaN值百分比超过50%的列.我可以通过运行以下操作然后使用drop手动完成.

df.isnull().sum()/len(df)*100
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一个优雅和快速的代码来做到这一点?

Ken*_*yme 8

可以使用threshdropna的参数.

df.dropna(axis=1, thresh=int(0.5*len(df)))
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 5

使用meanboolean indexing用于删除列:

print (df.isnull().mean() * 100)
group     0.0
id       62.5
val      12.5
dtype: float64
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 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
Run Code Online (Sandbox Code Playgroud)