Нахождение индекса даты в Python объекта DateTime - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список, который содержит даты, которые я создал, используя:

dates_list = pd.date_range(startdate, num_of_periods, freq = 'MS')

^ сохранил диапазон дат в dates_list

Это возвращает мой ежемесячный список дат правильно, если я распечатаю (date_list).

То, что я пытаюсь сделать, - это поиск номера индекса с определенной датой в диапазоне. Я попробовал:

dates_list.index(call_date)

^^ где call_date - это дата, когда я пытаюсь найти порядковый номер

и я получаю сообщение об ошибке:

TypeError: 'DatetimeIndex' object is not callable

Если я попробую эту же команду в более простом списке, т.е.: simple_list = ['cheese', 'banana', 'mushroom', 'apple' ...] simple_list.index('banana') возвращает 1.

Как получить значение индекса из списка дат? Есть ли что-то, что я должен сделать по-другому?

Любые отзывы будут оценены. Спасибо.

1 Ответ

0 голосов
/ 02 мая 2018

У вас есть DatetimeIndex объект, а не список. Вы можете подтвердить это, напечатав type(dates_list). DatetimeIndex объекты не имеют index метода.

Вы можете вручную получить индекс следующим образом:

dates_list = pd.date_range(start=pd.Timestamp('now').normalize(), periods=10, freq='D')

print(dates_list)

# DatetimeIndex(['2018-05-02', '2018-05-03', '2018-05-04', '2018-05-05',
#                '2018-05-06', '2018-05-07', '2018-05-08', '2018-05-09',
#                '2018-05-10', '2018-05-11'],
#               dtype='datetime64[ns]', freq='D')

res = (dates_list == pd.Timestamp('2018-05-04')).argmax()

# 2

Кроме того, вы можете использовать генератор. Этот метод рекомендуется только для больших диапазонов, когда вы считаете, что требуемая дата близка к началу вашего DatetimeIndex.

x = pd.Timestamp('2018-05-04')
res = next((i for i, j in enumerate(dates_list) if j == x), None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...