簡體   English   中英

與NaNs的元素比較相等

[英]Element-wise comparison with NaNs as equal

如果我運行以下代碼:

dft1 = pd.DataFrame({'a':[1, np.nan, np.nan]})
dft2 = pd.DataFrame({'a':[1, 1, np.nan]})
dft1.a==dft2.a

結果是

0     True
1    False
2    False
Name: a, dtype: bool

我怎樣才能得到結果

0     True
1    False
2     True
Name: a, dtype: bool

即,np.nan == np.nan評估為True。

我認為這是基本的功能,我一定要問一個重復的問題,但是我花了很多時間在搜索引擎優化或谷歌中找不到它。

想不出一個已經為你做過的功能(很奇怪)所以你可以自己做:

dft1.eq(dft2) | (dft1.isna() & dft2.isna())

       a
0   True
1  False
2   True

注意括號的存在。 在pandas中使用重載的按位運算符時,優先級是需要注意的事項。

另一個選擇是使用np.nan_to_num ,如果您確定兩個DataFrame的索引和列是相同的,那么此結果是有效的:

np.nan_to_num(dft1) == np.nan_to_num(dft2)

array([[ True],
       [False],
       [ True]])

np.nan_to_num用一些填充值填充NaNs(數字為0,字符串數組為'nan')。

使用np.iscloseequal_nan=True

np.isclose(dft1, dft2, equal_nan=True, rtol=0, atol=0)

array([[ True],
   [False],
   [ True]])

atolrtol設置為零以避免類似值上的相等斷言非常重要。

由於np.nan不等於np.nan

np.nan==np.nan
Out[609]: False



dft1.a.fillna('NaN')==dft2.a.fillna('NaN')
Out[610]: 
0     True
1    False
2     True
Name: a, dtype: bool

np.nan被定義為不等於np.nan

重復

檢查每對是否相等全部是np.nan

def naneq(t):
  return (t[0] == t[1]) or np.isnan(t).all()

[*map(naneq, zip(dft1.a, dft2.a))]

[True, False, True]

nunique

計算唯一值。 確保設置參數dropna=False

pd.concat([dft1, dft2], axis=1).nunique(1, 0) == 1

0     True
1    False
2     True
dtype: bool

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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