Ошибка типа: неподдерживаемые типы операндов для : ‘int’ и ‘DateOffset’

#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)]