我发现这是我困惑问题的根源。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) ...