如果我运行以下代码:
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。
我认为这是基本功能,我一定是在问一个重复的问题,但我花了很多时间在 SO 或 Google 中搜索,但找不到它。
最佳答案
想不出一个函数已经为你做了这个(很奇怪)所以你可以自己做:
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
用一些填充值填充 NaN(数字为 0,字符串数组为 'nan')。
关于python - 与 NaN 相等的逐元素比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52103594/