Python 查找并返回至少有一个np.inf值的数据帧行

Python 查找并返回至少有一个np.inf值的数据帧行,python,pandas,Python,Pandas,我有一个数据框,它有一些np.inf值,我想在np.inf出现的地方隔离这些行并检查它们。然而,dataframe有许多列,不容易逐个检查,尽管这可以在循环中完成 我试过了,但失败了: rows_with_inf = [df1[column][df1[column] == np.inf] for column in df1.columns if ((df1[column].isin([np.inf])).sum() !=0)] ---------------------------------

我有一个数据框,它有一些np.inf值,我想在np.inf出现的地方隔离这些行并检查它们。然而,dataframe有许多列,不容易逐个检查,尽管这可以在循环中完成

我试过了,但失败了:

rows_with_inf = [df1[column][df1[column] == np.inf] for column in df1.columns if ((df1[column].isin([np.inf])).sum() !=0)]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-94-768652e951ec> in <module>
----> 1 rows_with_inf = [df1[column][df1[column] == np.inf] for column in df1.columns if ((df1[column].isin([np.inf])).sum() !=0)]

<ipython-input-94-768652e951ec> in <listcomp>(.0)
----> 1 rows_with_inf = [df1[column][df1[column] == np.inf] for column in df1.columns if ((df1[column].isin([np.inf])).sum() !=0)]

~\Anaconda3\envs\tf2\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1553             "The truth value of a {0} is ambiguous. "
   1554             "Use a.empty, a.bool(), a.item(), a.any() or a.all().".format(
-> 1555                 self.__class__.__name__
   1556             )
   1557         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df1.columns if((df1[column].isin([np.inf])。sum()!=0)

---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->如果((df1[column].isin([np.inf])。sum()!=0),则df1.columns中的列有1行,其中的\u inf=[df1[column][df1[column]==np.inf]
英寸(.0)
---->如果((df1[column].isin([np.inf])。sum()!=0),则df1.columns中的列有1行,其中的\u inf=[df1[column][df1[column]==np.inf]
~\Anaconda3\envs\tf2\lib\site packages\pandas\core\generic.py in\uuuuuu非零(self)
1553“a{0}的真值是不明确的。”
1554“使用a.empty、a.bool()、a.item()、a.any()或a.all()。”格式(
->1555自我类名称__
1556             )
1557         )
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

实现这一目标的紧凑(“pythonic”)方法是什么?

您可以检查每行是否有inf值

rows_with_inf = df1[df1.apply(lambda x: any(np.isinf(x)), axis=1)]
用于测试,每行至少有一个
np.inf

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,np.inf,3],
         'D':[1,np.inf,5,7,1,0],
         'E':[5,3,6,9,2,np.inf],
         'F':list('aaabbb')
})



df1 = df[(df == np.inf).any(axis=1)]
print (df1)
   A  B    C    D    E  F
1  b  5  8.0  inf  3.0  a
4  e  5  inf  1.0  2.0  b
5  f  4  3.0  0.0  inf  b
或者,如果需要筛选列和行:

m = (df == np.inf)
df2 = df.loc[m.any(axis=1), m.any(axis=0)]
print (df2)

     C    D    E
1  8.0  inf  3.0
4  inf  1.0  2.0
5  3.0  0.0  inf
详细信息

print (df == np.inf)
       A      B      C      D      E      F
0  False  False  False  False  False  False
1  False  False  False   True  False  False
2  False  False  False  False  False  False
3  False  False  False  False  False  False
4  False  False   True  False  False  False
5  False  False  False  False   True  False

print ((df == np.inf).any(axis=1))
0    False
1     True
2    False
3    False
4     True
5     True
dtype: bool

无需在所有问题的页脚添加
您的建议,我们将不胜感激。到目前为止,您可能已经移除了约100个。记住,试图保持这个地方整洁的编辑是志愿者。我们承担这项任务可能是愚蠢的,但我们相信这个社会,尽管它有许多缺点。我们不希望在用户故意添加冗余和对话材料后进行清理。