我想知道为什么用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