Я вижу очень странное поведение при вызове reindex()
для фрейма данных, который, кажется, работает как ожидается для некоторых диапазонов дат, и ведет себя плохо для других. Пример:
Мой фрейм данных:
ipdb> df
_id
timestamp
2020-01-28 18:49:00 5e5d2e7eb25530387e29ad0e
2020-01-28 18:48:00 5e5d2e7eb25530387e29ad0f
2020-01-28 18:47:00 5e5d2e7eb25530387e29ad10
2020-01-28 18:46:00 5e5d2e7eb25530387e29ad11
2020-01-28 18:45:00 5e5d2e7eb25530387e29ad12
Скажем, я бы хотел посчитать значения для 3-минутных длинных интервалов:
ipdb> df.resample('3min').count()
_id
timestamp
2020-01-28 18:45:00 3
2020-01-28 18:48:00 2
Это работает хорошо , Но тогда я бы хотел сделать распределение для более широкого диапазона дат / времени, заполнив оставшиеся нулями (например, с 18:40:00 до 18:49:00):
ipdb> date_range = pd.date_range(start='2020-01-28 18:40:00', end='2020-01-28 18:49:00', freq='3min')
ipdb> date_range
DatetimeIndex(['2020-01-28 18:40:00', '2020-01-28 18:43:00',
'2020-01-28 18:46:00', '2020-01-28 18:49:00'],
dtype='datetime64[ns]', freq='3T')
Сейчас когда я вызываю reindex () с использованием этого диапазона дат, я теряю данные:
ipdb> df.resample('3min').count().reindex(date_range)
_id
2020-01-28 18:40:00 NaN
2020-01-28 18:43:00 NaN
2020-01-28 18:46:00 NaN
2020-01-28 18:49:00 NaN
Интересно, что если я изменю интервал 3min
на 5min
, результат на самом деле будет правильным:
ipdb> df.resample('5min').count().reindex(pd.date_range(start='2020-01-28 18:40:00', end='2020-01-28 18:49:00', freq='5min'))
_id
2020-01-28 18:40:00 NaN
2020-01-28 18:45:00 5.0
1min
тоже хорошо работает.
Почему Pandas решили, что там нет никакой ценности? Я упустил некоторые важные детали? Любые советы приветствуются.