python - 与 NaN 相等的逐元素比较

标签 python pandas numpy dataframe nan

如果我运行以下代码:

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/

相关文章:

Python websockets 服务器和 websockets 客户端在运行两个任务时使用 asyncio 断言错误

python - 如何检测 Python 变量是否为函数?

python - pandas 插值不适用于日期索引

python - 将返回一维数组的函数应用于 numpy 数组的所有元素

python - numpy 从索引列表创建 3D 数组

python - 更改 matplotlib imshow() 图形轴上的值

python - 如何在 try ... except 中捕获异常后继续循环

python - 使用子图和循环按组绘制 Pandas

python - 在满足同一行中的初始条件后遍历 Pandas 行

python - read_csv 获取发生异常的行