首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与NaNs相等的元素比较

与NaNs相等的元素比较
EN

Stack Overflow用户
提问于 2018-08-31 02:49:38
回答 4查看 1.3K关注 0票数 10

如果我运行以下代码:

代码语言:javascript
运行
复制
dft1 = pd.DataFrame({'a':[1, np.nan, np.nan]})
dft2 = pd.DataFrame({'a':[1, 1, np.nan]})
dft1.a==dft2.a

结果是

代码语言:javascript
运行
复制
0     True
1    False
2    False
Name: a, dtype: bool

我如何才能使结果成为

代码语言:javascript
运行
复制
0     True
1    False
2     True
Name: a, dtype: bool

即,np.nan == np.nan的计算结果为真。

我认为这是基本的功能,我一定是在问一个重复的问题,但我花了很多时间在SO或谷歌上搜索,都找不到它。

EN

回答 4

Stack Overflow用户

发布于 2018-08-31 02:53:48

我想不出一个函数已经为你做了这件事(奇怪),所以你可以自己做:

代码语言:javascript
运行
复制
dft1.eq(dft2) | (dft1.isna() & dft2.isna())

       a
0   True
1  False
2   True

请注意括号的存在。在pandas中使用重载的位运算符时,需要注意优先级。

另一种选择是使用np.nan_to_num,如果您确定两个DataFrames的索引和列相同,则此结果有效:

代码语言:javascript
运行
复制
np.nan_to_num(dft1) == np.nan_to_num(dft2)

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

np.nan_to_num用一些填充值填充nan (0表示数字,'nan‘表示字符串数组)。

票数 10
EN

Stack Overflow用户

发布于 2018-08-31 03:06:30

equal_nan=True中使用np.isclose

代码语言:javascript
运行
复制
np.isclose(dft1, dft2, equal_nan=True, rtol=0, atol=0)

代码语言:javascript
运行
复制
array([[ True],
   [False],
   [ True]])

atolrtol都设置为零是很重要的,以避免对相似的值进行相等断言。

票数 7
EN

Stack Overflow用户

发布于 2018-08-31 02:53:50

由于np.nan不等于np.nan

代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52103594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档