Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用statsmodels循环自动递归过滤器以生成多个列_Python 3.x_Pandas_Statsmodels_Autoregressive Models - Fatal编程技术网

Python 3.x 如何使用statsmodels循环自动递归过滤器以生成多个列

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

您好,我正在尝试在我的数据帧中包含statmodel的自回归过滤函数,以生成新列

但我在运行脚本时出错,如果我只在单个列上计算脚本,则不会发生错误:

TypeError:无法将序列与“float”类型的非int相乘

将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
。现在该工作了!我也找到了,再次谢谢你,它工作得很好。我忘记了熊猫的作用。好极了再次感谢你!