pandas dataframe - 删除所有值满足条件的列

Dic*_*ter 1 pandas

我有一个包含多列的 pandas 数据框。整个单级索引。

我希望删除列中所有值 ==0 的列

我可以通过循环每一列、测试并创建一个布尔数组来做到这一点。然后我转置、切片并转回

我必须想有更好的方法。

EdC*_*ica 5

只需使用布尔条件来创建掩码,然后调用any并传递axis=0参数来删除所有列NaN,该any调用将创建一个布尔系列,您可以使用它来选择所有值都不是的列NaN

In [18]:

df = pd.DataFrame({'a':np.random.randn(5), 'b':0,'c':np.random.randn(5),'d':0, 'e':np.arange(5)})
df
Out[18]:
          a  b         c  d  e
0 -0.546906  0  0.235070  0  0
1  0.260935  0  0.650391  0  1
2  0.419727  0 -1.002794  0  2
3 -0.283556  0  0.668378  0  3
4  0.924392  0 -1.297040  0  4
In [28]:

df[df.columns[(df!=0).any(axis=0)]]
Out[28]:
          a         c  e
0 -0.546906  0.235070  0
1  0.260935  0.650391  1
2  0.419727 -1.002794  2
3 -0.283556  0.668378  3
4  0.924392 -1.297040  4
In [27]:

(df!=0).any(axis=0)
Out[27]:
a     True
b    False
c     True
d    False
e     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)