为什么平等和不平等与完全nan范畴序列的比较总是返回False



我发现这是我困惑问题的根源。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", 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值失败(returns False)任何比较操作。

numpy.nan == numpy.nan

是CCD_ 4。同样,这是标准所要求的。这个概念是,如果某个东西是而不是数字,那么你就无法将其与是数字的任何东西进行比较。这是通常的TypeError,但NaN是专门为需要具有非数字而开发的,尽管如此,它与数字数据集的其余部分部分部分兼容。Inf家族也在本标准中进行了定义。

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

最新更新