Python 查找并返回至少有一个np.inf值的数据帧行
我有一个数据框,它有一些np.inf值,我想在np.inf出现的地方隔离这些行并检查它们。然而,dataframe有许多列,不容易逐个检查,尽管这可以在循环中完成 我试过了,但失败了: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)] ---------------------------------
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个。记住,试图保持这个地方整洁的编辑是志愿者。我们承担这项任务可能是愚蠢的,但我们相信这个社会,尽管它有许多缺点。我们不希望在用户故意添加冗余和对话材料后进行清理。