Индекс игнорирования равенства серий панд - PullRequest
0 голосов
/ 05 июня 2018

Индексы играют роль в равенстве серий, я хотел бы запустить проверку, которая будет игнорировать индексы и просто учитывать только значения, а также обрабатывать регистр для разных длин.

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 голосов
/ 05 июня 2018

Если вы имеете дело с числовыми данными и хотите обрабатывать 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)
0 голосов
/ 05 июня 2018

А как же

(s_a.values == s_b.values).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...