python - 比较包含 nan 的 pandas 系列是否相等?

标签 python pandas numpy nan equality-operator

我的应用程序需要比较有时包含 nans 的 Series 实例。这会导致使用 == 的普通比较失败,因为 nan != nan:

import numpy as np
from pandas import Series
s1 = Series([1,np.nan])
s2 = Series([1,np.nan])

>>> (Series([1, nan]) == Series([1, nan])).all()
False

比较此类系列的正确方法是什么?

最佳答案

这个怎么样。首先检查 NaN 是否在同一位置(使用 isnull ):

In [11]: s1.isnull()
Out[11]: 
0    False
1     True
dtype: bool

In [12]: s1.isnull() == s2.isnull()
Out[12]: 
0    True
1    True
dtype: bool

然后检查不是 NaN 的值是否相等(使用 notnull ):

In [13]: s1[s1.notnull()]
Out[13]: 
0    1
dtype: float64

In [14]: s1[s1.notnull()] == s2[s2.notnull()]
Out[14]: 
0    True
dtype: bool

为了平等,我们需要都为真:

In [15]: (s1.isnull() == s2.isnull()).all() and (s1[s1.notnull()] == s2[s2.notnull()]).all()
Out[15]: True

如果这还不够,您还可以检查姓名等。

如果你想在它们不同时提高,使用assert_series_equal来自 pandas.util.testing:

In [21]: from pandas.util.testing import assert_series_equal

In [22]: assert_series_equal(s1, s2)

关于python - 比较包含 nan 的 pandas 系列是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18453442/

相关文章:

python - 在字符串格式中使用 numpy.bytes_ 对象时超出最大递归深度

python - 为什么这些 C/Cython 数组定义为字符,而不是整数数组?

python - GNOME 面板小程序执行问题

python - Pandas/Python 合并两个具有重复行的数据框

python - 替换另一列中的缺失值 - pandas

python - 新列作为其他列的列表,但没有 nan

python - 使用 matplotlib 在 python 中绘制堆叠直方图

python - 使用 Matplotlib 绘制散点图矩阵的刻度属性

python - Python 中的静态类变量,不会为每个实例复制

python - float 对象不是str错误的属性