[英]pandas: how to create a column filled with an interval with right=np.inf?
[英]Finding and returning the rows of a Pandas dataframe where there is at least one np.inf value
我有一個 dataframe 有一些 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().
實現這一目標的緊湊('pythonic')方法是什么?
使用boolean indexing
和DataFrame.any
來測試每行至少一個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
您可以檢查每一行是否有任何值是 inf。
rows_with_inf = df1[df1.apply(lambda x: any(np.isinf(x)), axis=1)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.