pandas系列相等忽略索引

时间:2018-06-04 22:20:40

标签: python pandas

索引在系列相等性中起作用,我想运行一个忽略索引的检查,只考虑值,同时也处理不同长度的情况。

pandas.Series.equals处理不同长度的部分,但也强加了索引等式约束。为了解决这个问题,我正在做以下事情......

def isEqualValues( s1 , s2 ) :
    return s1.reset_index(drop=True).equals( s2.reset_index(drop=True) )

到目前为止这很有效,

>>> import pandas
>>> s_a = pandas.Series([1,2,3])
>>> s_b = pandas.Series([1,2,3], index=[10,11,12] )
>>> s_c = pandas.Series([1,2])
>>>
>>> print( isEqualValues( s_a , s_b ) )
True
>>> print( s_a.equals( s_b ) )
False
>>> print( isEqualValues( s_a , s_c ) )
False
>>> print( s_a.equals( s_c ) )
False

有没有官方方法在大熊猫本身进行此操作而不诉诸指数重置?

2 个答案:

答案 0 :(得分:1)

如果您正在处理数字数据并想要处理NaN,请使用np.allclose

np.allclose(s_a, s_b, equal_nan=True)
  • 适用于整数和浮动
  • 优雅地处理浮动不准确
  • 精确控制如何处理NaN

如果要比较的系列的长度不相同,则会引发ValueError。要处理此问题,请添加一个预长度检查:

len(s_a) == len(s_b) and np.allclose(s_a, s_b, equal_nan=True)

答案 1 :(得分:0)

怎么样?
(s_a.values == s_b.values).all()