Для unittest мне нужно сравнить два pandas DataFrames (с одним столбцом, чтобы они также могли быть переданы в Series без потери информации). Проблема в том, что индекс одного из них имеет тип даты и времени, а другая дата. Для наших целей информация в двух случаях одинакова, так как компонент времени datetime не используется.Сравните две серии Pandas/DataFrames, которые практически равны
Чтобы проверить, если два объекта равны для UnitTest I Could:
- Извлечь индекс одного из них и бросил на дату/DateTime
- Extract только значения одного столбца, сравнить те, и даты начала и окончания
Не хватает ли вы элегантного способа сравнить эти два?
Пример кода:
from datetime import date, datetime, timedelta
import pandas as pd
days_in_training = 40
start_date = date(2016, 12, 1)
dates = [start_date + timedelta(days=i) for i in range(days_in_training)]
actual = pd.DataFrame({'col1': range(days_in_training)}, index=dates)
start_datetime = datetime(2016, 12, 1)
datetimes = [start_datetime + timedelta(days=i) for i in range(days_in_training)]
expected = pd.DataFrame({'col1': range(days_in_training)}, index=datetimes)
assert(all(actual == expected))
Дает:
ValueError: Can only compare identically-labeled DataFrame objects
try 'assert (all (actual.values == expected.values))' здесь '.values' возвращает массив np, поэтому индекс не задействован – EdChum
Ну, да. Это было одно из моих предложений, но оно не проверяет, совпадают ли даты. Я мог бы проверить это отдельно, но мне было просто интересно, было ли элегантное решение сделать все сразу. –
Почему бы просто не преобразовать индекс на сегодняшний день? 'expected.index = expected.index.date', тогда он выровнят – EdChum