#python #datetime
Вопрос:
Я ссылался на предыдущие ссылки в stackoverflow, но все еще не получил точного ответа. Я использую записную книжку Colab. Мой df.tail() выглядит так:
df.хвост()
Я хочу создать следующие пустые 24 строки на 24 месяца для прогнозирования моего кода:
from pandas.tseries.offsets import DateOffset
future_dates = [df.index[-1] DateOffset(months = x) for x in range (0,24)]
Это приводит меня к ошибке:
Ошибка типа: неподдерживаемые типы операндов для : ‘int’ и ‘DateOffset’.
Комментарии:
1. Пожалуйста, включите образец инициализированного фрейма данных и полную обратную трассировку ошибки из опубликованного вами примера кода.
2. Каким типом вы ожидаете
df.index[-1]
быть?3. тделани , это ежемесячные данные о ценах на золото с 1979 по май 2021 года. Теперь я хочу спрогнозировать цену на следующие 24 месяца, для которых я кодирую «future_dates = [df.индекс[-1] набор дат(месяцев = x) для x в диапазоне (0,24)]» . Я рассчитал сезонную первую разницу, используя — df [«Сезонная первая разница»] = df [«Цена»] — df [«Цена»]. сдвиг(12)
4. @JohnGordon — Я не уверен, насколько полезен этот комментарий. Скорее всего, это объект RangeIndex, и
df.index[-1]
это просто последнее допустимое значение индекса-и, следовательно, это то, что вызывает проблему. Но не лучше ли просто объяснить это?5. «Я хочу создать следующие пустые 24 строки на 24 месяца для прогнозирования» Вы имели в виду, что хотели добавить 24 строки в свой фрейм данных? Или есть список типов(DateOffset) или что-то еще?
Ответ №1:
df.index
является индексатором для фрейма данных, а не самого фрейма данных. Индексатором по умолчанию RangeIndex
для фрейма данных является объект pandas. Когда вы индексируете этот объект, он возвращает целочисленный индекс, в который преобразуется ваш индекс. Отрицательные индексы учитываются с конца, так [-1]
же как и окончательный допустимый индекс фрейма данных. Для фрейма данных из 509 строк 508 является последним допустимым индексом.
Вместо этого вы можете использовать iloc
метод для получения строк по целочисленному индексу. Как и во всем, что касается панд, у iloc есть свои сложности (см. Документы), но вы можете это сделать
future_dates = [df.iloc[-1]["Date"] DateOffset(months = x) for x in range (0,24)]