我一直在寻找一段时间,只显示包含零的行以及显示没有零的行的方法。问题是我有很多列,我希望能够将此方法应用于除"结果"列以外的所有列,而无需编写数百个名称的列表。
我对 isnull(( 方法感到非常困惑,因为它只是用布尔值替换所有值,对我来说看起来毫无用处。
附言您能否编写一个代码来执行相同的操作,但具有无限的值。熊猫数据帧中的 Inf。
多谢!
您可以使用布尔索引,结合使用loc
和iloc
来选择所需的列 假设您有一个这样的数据帧
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
中的所有行
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)]
请注意,无论"结果"列在"中"的位置如何,此解决方案都有效 您的数据帧。