df.loc[:, (df != 0).any(axis=0)]
以下是它如何工作的细分:
In [74]: import pandas as pd
In [75]: df = pd.DataFrame([[1,0,0,0], [0,0,1,0]])
In [76]: df
Out[76]:
0 1 2 3
0 1 0 0 0
1 0 0 1 0
[2 rows x 4 columns]
df!= 0创建一个布尔数据帧,它是真的,其中df是非零的:
In [77]: df != 0
Out[77]:
0 1 2 3
0 True False False False
1 False False True False
[2 rows x 4 columns]
(df!= 0).any(axis = 0)返回一个布尔系列,表示哪些列具有非零项. (any操作将沿0轴的值 – 即沿着行 – 聚合成一个布尔值.因此结果是每列的一个布尔值.)
In [78]: (df != 0).any(axis=0)
Out[78]:
0 True
1 False
2 True
3 False
dtype: bool
并且df.loc可用于选择这些列:
In [79]: df.loc[:, (df != 0).any(axis=0)]
Out[79]:
0 2
0 1 0
1 0 1
[2 rows x 2 columns]
要“删除”零列,请重新分配df:
df = df.loc[:, (df != 0).any(axis=0)]