比较pd.Series并在该系列包含None时得到异常结果



我想知道为什么用None值比较两个相同的序列会返回False:

pd.Series(['x', 'y', None]) == pd.Series(['x', 'y', None])
0     True
1     True
2    False
dtype: bool

我希望所有的结果都是真的。如果我从序列中创建一个数组,并进行比较,我会得到预期的结果:

pd.Series(['x', 'y', None]).values == pd.Series(['x', 'y', None]).values
array([ True,  True,  True])

为什么具有None的两个相同级数不相等?我是不是错过了什么?

我期望np.nan的这种行为,因为np.nan != np.nan;然而,None == None

这是经过设计的:

请参阅警告框:http://pandas.pydata.org/pandas-docs/stable/missing_data.html

这是很久以前为了使null的行为一致性,因为它们的比较不平等。这使得None和在等号上的np.nan(虽然与python不一致,但一致用numpy(基脚。

因此,这不是一个bug,而是跨越两个约定的结果。

我想文档可以稍微增强一下。

对于包含空值的系列的等式,请使用pd.Series.equals:

pd.Series(['x', 'y', None]).equals(pd.Series(['x', 'y', None]))  # True

最新更新