如何在具有混合类型列的Pandas Dataframe中删除所有数值列包含零的行?

时间:2015-06-24 05:28:27

标签: python pandas

我有以下数据框:

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()]

2 个答案:

答案 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[]
相关问题