熊猫过滤数据框以仅显示包含零的行

时间:2020-01-25 09:24:59

标签: python pandas

我一直在寻找show only rows which contain zeros and also way to show rows不带零的时间。问题是我有很多列,并且我希望能够将此方法应用于除“结果”列之外的所有列,而不必写成百个名称的列表。

我对isnull()方法感到非常困惑,因为它只是将所有值替换为布尔值,并且对我来说似乎毫无用处。

P.S。您能否编写代码以执行相同的操作,但是具有无限的值。 Inf in pandas数据框。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您可以结合使用lociloc来使用布尔索引来选择所需的列,假设您拥有这样的数据框

df = pd.DataFrame({'a':[0,0,1,1], 'b':[0,1,0,1],'c':[1,1,2,1],'d':[4,1,6,1]})
df

    a   b   c   d
0   0   0   1   4
1   0   1   1   1
2   1   0   2   6
3   1   1   1   1

,并且您想选择除col a之外的所有大于零的行,则可以使用以下方法:

df.loc[(df.iloc[:,1:]!=0).all(1)]

输出:

    a   b   c   d
1   0   1   1   1
3   1   1   1   1

,当您要舍弃col a中所有值为零和res的行时,请使用:

df.loc[(df.iloc[:,:1]!=0).all(1)]

输出:

    a   b   c   d
2   1   0   2   6
3   1   1   1   1

答案 1 :(得分:1)

对于您的示例数据,作为“学习步骤”运行:

df.drop(columns=['Result']).eq(0).any(axis=1)

结果将是 bool 类型的系列

0    False
1    False
2     True
3    False
4     True
dtype: bool

包含问题的答案:任何元素是否连续出现( axis = 1 ) == 0( eq(0))在没有 Result 列( drop(columns = ['Result']))的DataFrame中吗?< / p>

然后应将上述 Series 用于布尔索引

df[...]

因此,要使所有包含 0 的行包含(在 Result 以外的列中),请运行:

df[df.drop(columns=['Result']).eq(0).any(axis=1)]

并获取包含任何 0 运行的行:

df[~df.drop(columns=['Result']).eq(0).any(axis=1)]

请注意,无论 Result 列在其中的位置如何,此解决方案均有效 您的DataFrame。