Python 为什么将等式和不等式与完全nan分类序列进行比较总是返回False?
我发现这是一个让我困惑的问题的根源。熊猫1.05Python 为什么将等式和不等式与完全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"
>>> 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).