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



我一直在寻找一段时间,只显示包含零的行以及显示没有零的行的方法。问题是我有很多列,我希望能够将此方法应用于除"结果"列以外的所有列,而无需编写数百个名称的列表。

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

附言您能否编写一个代码来执行相同的操作,但具有无限的值。熊猫数据帧中的 Inf。

多谢!

您可以使用布尔索引,结合使用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

对于示例数据,作为"学习步骤"运行:

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

结果将是一系列布尔类型:

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

包含问题的答案:行中是否有任何元素(axis=1( == 0 (eq(0(( 在没有结果列的数据帧中(drop(columns=['Result']((?

然后,上述系列应用于布尔索引

df[...]

因此,要获取包含任何0的所有行(在Result以外的列中(,请运行:

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

要获取不包含任何0的行,请运行:

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

请注意,无论"结果"列在"中"的位置如何,此解决方案都有效 您的数据帧。

最新更新