我一直在寻找show only rows which contain zeros and also way to show rows不带零的时间。问题是我有很多列,并且我希望能够将此方法应用于除“结果”列之外的所有列,而不必写成百个名称的列表。
我对isnull()方法感到非常困惑,因为它只是将所有值替换为布尔值,并且对我来说似乎毫无用处。
P.S。您能否编写代码以执行相同的操作,但是具有无限的值。 Inf in pandas数据框。
非常感谢!
答案 0 :(得分:2)
您可以结合使用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
中所有值为零和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。