我有以下数据框:
import pandas as pd
df = pd.DataFrame({'a':[0,0,1,1], 'b':[0,1,0,1],'tag':['apple','orange','grapes','lemon']})
df = df[["tag","a","b"]]
看起来像这样:
In [37]: df
Out[37]:
tag a b
0 apple 0 0
1 orange 0 1
2 grapes 1 0
3 lemon 1 1
我想要做的是删除数字列为零的行,结果如下:
tag a b
orange 0 1
grapes 1 0
lemon 1 1
我怎样才能做到这一点?
请注意,实际上,列数可以大于2,列名可以更改。所以我们需要一个通用的解决方案。
我尝试了这个但没有效果:
df[(df.T != 0).any()]
答案 0 :(得分:1)
获取数字列:
numcols = df.dtypes == np.int64
创建索引器
I = np.sum((df.loc[:,numcols]) != 0,axis = 1) != 0
df[I]
tag a b
1 orange 0 1
2 grapes 1 0
3 lemon 1 1
答案 1 :(得分:1)
在这个答案中有一些不同的事情,让我知道是否有任何特别令人困惑的事情:
df.loc[~ (df.select_dtypes(include=['number']) == 0).all(axis='columns'), :]
所以:
.all()
方法~
df.loc[]