簡體   English   中英

查找並返回 Pandas dataframe 的行,其中至少有一個 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 indexingDataFrame.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM