Python 为什么将等式和不等式与完全nan分类序列进行比较总是返回False?

Python 为什么将等式和不等式与完全nan分类序列进行比较总是返回False?,python,pandas,Python,Pandas,我发现这是一个让我困惑的问题的根源。熊猫1.05 >>> left = pd.Series(pd.Categorical([numpy.nan, numpy.nan, numpy.nan, numpy.nan], categories=["1"], ordered=False)) >>> right = pd.Series(pd.Categorical(["1", "1", "1"

我发现这是一个让我困惑的问题的根源。熊猫1.05

>>> left = pd.Series(pd.Categorical([numpy.nan, numpy.nan, numpy.nan, numpy.nan], categories=["1"], ordered=False))
>>> right = pd.Series(pd.Categorical(["1", "1", "1", numpy.nan], categories=["1"], ordered=False))

>>> left == right 
0    False
1    False
2    False
3    False
dtype: bool

>>> left != right
0    False
1    False
2    False
3    False
dtype: bool

为什么会发生这种情况?

这是ISO标准中定义的
NaN
的基本属性之一

NaN
值会导致任何比较操作失败(
返回False

numpy.nan == numpy.nan
False
。同样,这也是标准所要求的。这个概念是,如果某个东西不是数字,那么你就不能将它与任何数字进行比较。这通常是一个类型错误,但是
NaN
是专门为需要一个非数字而开发的,尽管如此,该数字部分地与数字数据集的其余部分兼容。本标准中还定义了
Inf
系列


在这些漂亮的软件包出现之前,我就是这样在一些模拟代码中快速检查
NaN
如果没有(x==x).
这是ISO标准中定义的
NaN
的基本属性之一

NaN
值会导致任何比较操作失败(
返回False

numpy.nan == numpy.nan
False
。同样,这也是标准所要求的。这个概念是,如果某个东西不是数字,那么你就不能将它与任何数字进行比较。这通常是一个类型错误,但是
NaN
是专门为需要一个非数字而开发的,尽管如此,该数字部分地与数字数据集的其余部分兼容。本标准中还定义了
Inf
系列

在这些漂亮的软件包出现之前,我就是这样在一些模拟代码中快速检查
NaN
if not(x==x).