删除所有值为零的所有列

Rac*_*hel 3 python dataframe pandas

我有一个简单的问题,这里有类似的问题,在这里.

我试图从pandas数据帧中删除所有列,这些数据帧只有零(垂直axis=1).让我给你举个例子:

df = pd.DataFrame({'a':[0,0,0,0], 'b':[0,-1,0,1]})

    a   b
0   0   0
1   0  -1
2   0   0
3   0   1
Run Code Online (Sandbox Code Playgroud)

我想删除列,a因为它只有零.

但是,如果可能的话,我想以漂亮和矢量化的方式做到这一点.我的数据集很大 - 所以我不想循环.因此我试过了

df = df.loc[(df).any(1), (df!=0).any(0)]

    b
1  -1
3   1
Run Code Online (Sandbox Code Playgroud)

这允许我删除列和行.但如果我只是试图删除列,loc似乎失败了.有任何想法吗?

jez*_*ael 7

你真的很亲近,使用any- 0被铸造成Falses:

df = df.loc[:, df.any()]
print (df)

   b
0  0
1  1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 6

如果它是 0 的问题而不是总和,请使用df.any

In [291]: df.T[df.any()].T
Out[291]: 
   b
0  0
1 -1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)

或者:

In [296]: df.T[(df != 0).any()].T # or df.loc[:, (df != 0).any()]
Out[296]: 
   b
0  0
1 -1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)


Max*_*axU 5

In [73]: df.loc[:, df.ne(0).any()]
Out[73]:
   b
0  0
1  1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)

或者:

In [71]: df.loc[:, ~df.eq(0).all()]
Out[71]:
   b
0  0
1  1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)

如果我们想检查那些不总结为0

In [78]: df.loc[:, df.sum().astype(bool)]
Out[78]:
   b
0  0
1  1
2  0
3  1
Run Code Online (Sandbox Code Playgroud)