如果我运行以下代码:
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的计算结果为真。
我认为这是基本的功能,我一定是在问一个重复的问题,但我花了很多时间在SO或谷歌上搜索,都找不到它。
发布于 2018-08-31 02:53:48
我想不出一个函数已经为你做了这件事(奇怪),所以你可以自己做:
dft1.eq(dft2) | (dft1.isna() & dft2.isna())
a
0 True
1 False
2 True
请注意括号的存在。在pandas中使用重载的位运算符时,需要注意优先级。
另一种选择是使用np.nan_to_num
,如果您确定两个DataFrames的索引和列相同,则此结果有效:
np.nan_to_num(dft1) == np.nan_to_num(dft2)
array([[ True],
[False],
[ True]])
np.nan_to_num
用一些填充值填充nan (0表示数字,'nan‘表示字符串数组)。
发布于 2018-08-31 03:06:30
在equal_nan=True
中使用np.isclose
np.isclose(dft1, dft2, equal_nan=True, rtol=0, atol=0)
array([[ True],
[False],
[ True]])
将atol
和rtol
都设置为零是很重要的,以避免对相似的值进行相等断言。
发布于 2018-08-31 02:53:50
由于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
https://stackoverflow.com/questions/52103594
复制相似问题