代码之家  ›  专栏  ›  技术社区  ›  It_is_Chris

比较pd.Series,并在该系列不包含任何内容时获得不寻常的结果

  •  3
  • It_is_Chris  · 技术社区  · 7 年前

    我想知道为什么把两个相同的系列与 None

    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])
    

    为什么这两个系列是相同的 没有一个

    我期待着这种行为 np.nan np.nan != np.nan None == None

    1 回复  |  直到 7 年前
        1
  •  3
  •   jpp    7 年前

    这是 by design

    http://pandas.pydata.org/pandas-docs/stable/missing_data.html

    这是在相当长的一段时间前完成的,目的是使null的行为 一致的,因为它们不相等。这就 None np.nan 在一个相等(虽然与python不一致,但一致

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

    我想文档可以稍微改进一下。

    要使包含空值的序列相等,请使用 pd.Series.equals :

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