Вызов reindex () в кадре данных отбрасывает данные, казалось бы, случайным образом для некоторых значений частоты. - PullRequest
0 голосов
/ 02 марта 2020

Я вижу очень странное поведение при вызове 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 решили, что там нет никакой ценности? Я упустил некоторые важные детали? Любые советы приветствуются.

...