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

时间:2015-03-30 17:18:47

标签: pandas

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

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

我能够通过循环遍历每一列,测试并创建一个布尔数组来实现。 然后我转置,切片和转置回来

BUT

我必须认为有更好的方法。

2 个答案:

答案 0 :(得分:3)

只需使用布尔条件制作掩码,然后调用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

答案 1 :(得分:0)

这是使用列表理解的解决方案:

df = pd.DataFrame({'a': [1,2], 'b': [0,0], 'c': [3,4], 'd': [0, 0]})
df[[col for col in df if ~df[col].eq(0).all()]]
Out[11]: 
   a  c
0  1  3
1  2  4