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






У вас есть объект 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)