Python 在时间索引时间序列上应用shift()时出现问题

Python 在时间索引时间序列上应用shift()时出现问题,python,pandas,time-series,Python,Pandas,Time Series,我正在尝试使用pandas shift()方法为监督学习任务创建一个包含时间序列滞后值的df。当尝试将PeriodsPost设置为大于2015的值时,我在下面的代码段中使用模拟数据时出现以下错误: ValueError: Must have equal len keys and value when setting with an iterable 使用实际时间序列数据时,我得到以下错误: ValueError: could not broadcast input array from sha

我正在尝试使用pandas shift()方法为监督学习任务创建一个包含时间序列滞后值的df。当尝试将PeriodsPost设置为大于2015的值时,我在下面的代码段中使用模拟数据时出现以下错误:

ValueError: Must have equal len keys and value when setting with an iterable
使用实际时间序列数据时,我得到以下错误:

ValueError: could not broadcast input array from shape (8760) into shape (8760,2015)
我将指数时间范围内第一个日期的年份更改为2017年,如果periodsPast大于2017年,则会出现错误

代码段(模拟数据):

似乎由于某种原因,第2016栏无法添加。此外,误差增大的值对应于第一个指数的年份也不是巧合


有什么想法吗?这一定是我在这里缺少的一些非常基本的东西。非常感谢

尝试打印
dfLags['t-2016']
,您会发现出于某些原因,它选择了特定范围的行,其中年份为2016年,而不是创建列。不确定为什么它在2015年没有通过相同的错误,因为它也只选择行,但无论如何,如果您可以使用
\uuu
而不是
-
将列的名称更改为
't'+str(t)
,它将像预期的那样工作,您的建议奏效了。但我不理解这种行为。似乎字符串“t-2016”在某个点被转换/解释为时间戳,因为该索引是DatetimeIndex。为什么只在t-2016上出现错误,而没有其他值,不确定是否要打印
dfLags['t-2016']
,您会看到,出于某些原因,它选择了2016年所在的特定行范围,而不是创建列。不确定为什么它在2015年没有通过相同的错误,因为它也只选择行,但无论如何,如果您可以使用
\uuu
而不是
-
将列的名称更改为
't'+str(t)
,它将像预期的那样工作,您的建议奏效了。但我不理解这种行为。似乎字符串“t-2016”在某个点被转换/解释为时间戳,因为该索引是DatetimeIndex。为什么只在t-2016上出现错误,而没有其他值,目前还不确定
import pandas as pd 

periodsPast = 2020 # any value above 2015 would give an error 

series = pd.Series(data = [i for i in range(1,10001)], index=pandas.date_range('2015-01-01 00:00:00',periods=10000,freq='H'))

dfLags = pd.DataFrame(data=None, index=series.index)
for t in range(0, periodsPast + 1):
    if t == 0:
        dfLags['t'] = series
    else:
        dfLags['t-'+str(t)] = series.shift(t)