Python 3.x 如何使用statsmodels循环自动递归过滤器以生成多个列
您好,我正在尝试在我的数据帧中包含statmodel的自回归过滤函数,以生成新列 但我在运行脚本时出错,如果我只在单个列上计算脚本,则不会发生错误: TypeError:无法将序列与“float”类型的非int相乘Python 3.x 如何使用statsmodels循环自动递归过滤器以生成多个列,python-3.x,pandas,statsmodels,autoregressive-models,Python 3.x,Pandas,Statsmodels,Autoregressive Models,您好,我正在尝试在我的数据帧中包含statmodel的自回归过滤函数,以生成新列 但我在运行脚本时出错,如果我只在单个列上计算脚本,则不会发生错误: TypeError:无法将序列与“float”类型的非int相乘 将statsmodels.api导入为sm 将statsmodels.tsa导入为tsa 将statsmodels.formula.api作为smf导入 作为pd进口熊猫 #生成数据集: data=pd.DataFrame({'effect1':[],'effect2':[],'ef
将statsmodels.api导入为sm
将statsmodels.tsa导入为tsa
将statsmodels.formula.api作为smf导入
作为pd进口熊猫
#生成数据集:
data=pd.DataFrame({'effect1':[],'effect2':[],'effect3':[]))
对于范围(10)内的i:
data=data.append({'effect1':i,'effect2':i*2,'effect3':i*3},ignore_index=True)
#检查数据类型
data=data.astype('int64')
#计算自回归递归滤波器
结转=(.1,.2)
滚动_df=(tsa.filters.filtertools.recursive_filter(col,i)
.rename({col:'{0}{1:d})。格式(col,i)
对于data.columns}中的列,轴=1)
因为我在结转中)
数据=pd.concat((数据,*rolling_df),轴=1)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
10(对于我在结转中)
11
--->12数据=局部混凝土((数据,*滚动方向),轴=1)
英寸(.0)
8.重命名({col:'{0}{1:d})。格式(col,i)
9表示data.columns}中的列,轴=1)
--->10(对于我在结转中)
11
12数据=局部混凝土((数据,*滚动方向),轴=1)
递归过滤器中的~\AppData\Local\Continuum\anaconda3\envs\regressor\lib\site packages\statsmodels\tsa\filters\filtertools.py(x,ar\u coeff,init)
208 zi=无
209
-->210 y=signal.lfilter([1.],np.r_U1,-ar_系数),x,zi=zi)
211
212如果init不是None:
lfilter中的~\AppData\Local\Continuum\anaconda3\envs\regressor\lib\site packages\scipy\signal\signaltools.py(b、a、x、axis、zi)
1395其他:
1396如果zi为无:
->1397返回信号工具。线性滤波器(b、a、x、轴)
1398其他:
1399返回信号工具。线性滤波器(b、a、x、轴、zi)
TypeError:无法将序列与“float”类型的非int相乘
以下是对如何计算滚动df的修改:
# Optional: bind the function to a shorter name. You could also
# import this as something terse, or just leave it as is
f = tsa.filters.filtertools.recursive_filter
rolling_df = [data.apply(f, ar_coeff=i)
.add_suffix(f'_{i}')
for i in carry_over]
data = pd.concat((data, *rolling_df), axis=1)
data
effect1 effect2 effect3 effect1_0.1 effect2_0.1 effect3_0.1 effect1_0.2 effect2_0.2 effect3_0.2
0 0 0 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
1 1 2 3 1.000000 2.000000 3.000000 1.000000 2.000000 3.000000
2 2 4 6 2.100000 4.200000 6.300000 2.200000 4.400000 6.600000
3 3 6 9 3.210000 6.420000 9.630000 3.440000 6.880000 10.320000
4 4 8 12 4.321000 8.642000 12.963000 4.688000 9.376000 14.064000
5 5 10 15 5.432100 10.864200 16.296300 5.937600 11.875200 17.812800
6 6 12 18 6.543210 13.086420 19.629630 7.187520 14.375040 21.562560
7 7 14 21 7.654321 15.308642 22.962963 8.437504 16.875008 25.312512
8 8 16 24 8.765432 17.530864 26.296296 9.687501 19.375002 29.062502
9 9 18 27 9.876543 19.753086 29.629630 10.937500 21.875000 32.812500
哇,谢谢你的专业提示和快速反应。我只是将函数与上面的循环进行比较,然后单独调用函数。我没有遇到相同的结果,这很奇怪,它仍然是完全相同的计算逻辑。y[n]=ar_系数[0]*y[n-1]+…+ar_coeff[n_coeff-1]*y[n-n_coeff]+x[n]tsa.filters.filtertools.recursive_filter(数据['effect2',0.1)对不起,我应该保留默认的应用(axis=0)
行为,但我错误地编写了axis=1
。现在该工作了!我也找到了,再次谢谢你,它工作得很好。我忘记了熊猫的作用。好极了再次感谢你!