Как использовать assertSequenceEqual с пандами серии? - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу проверить, имеют ли два объекта pandas.Series одинаковое содержимое, с помощью модуля unittest:

    self.assertSequenceEqual(
        df['some_column'],
        someOtherSeries)

В соответствии с документацией unittest вышеприведенное должно работать (на основе документы ).Тем не менее, когда я запускаю мой вышеупомянутый модульный тест, я получаю это:

======================================================================
ERROR: test_my_test (my_module.test.test_my_module.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/root/src/my_module/my_module/test/test_my_test.py", line 28, in test_my_test
    someOtherSeries)
  File "/usr/local/lib/python2.7/unittest/case.py", line 663, in assertSequenceEqual
    if seq1 == seq2:
  File "/usr/local/lib/python2.7/site-packages/pandas/core/generic.py", line 917, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Как я могу проверить, являются ли Series одинаковыми?

Обратите внимание, что преобразование Series в list объекты кажетсячтобы обойти эту проблему, но это похоже на взлом:

    self.assertSequenceEqual(
        list(df['some_column']),
        list(someOtherSeries))

1 Ответ

0 голосов
/ 26 апреля 2018

Обратите внимание, что df['some_column'].values - это массив numpy.Чтобы проверить равенство (o эквивалентность) numpy массивов, вы можете использовать numpy.testing:

from numpy import testing

testing.assert_array_equal(df['some_column'].values, someOtherSeries.values)

Если массивы являются плавающими точками, вы должнырассмотрим numpy.testing.assert_almost_equal

testing.assert_almost_equal(df['some_column'].values, someOtherSeries.values)

, так как непосредственно приравнивать числа с плавающей запятой проблематично.

...