Python 使用滚动窗口获取statsmodels acf函数的输出

Python 使用滚动窗口获取statsmodels acf函数的输出,python,pandas,advanced-custom-fields,statsmodels,Python,Pandas,Advanced Custom Fields,Statsmodels,我可以通过以下方法提取特定滞后时间的自相关值: df.rolling(window = 10).apply(lambda x: acf(x, nlags = 5)[5]).plot() 然而,由于acf实际上正在进行所有的计算,我希望得到所有的计算结果,而不仅仅是一个。这样我就可以将这个返回的数组/列表解包成一堆列,分别绘制每个列,但不必经过acf那么多不必要的时间。所以我试着: df.rolling(window = 10).apply(lambda x: list(acf(x, nlags

我可以通过以下方法提取特定滞后时间的自相关值:

df.rolling(window = 10).apply(lambda x: acf(x, nlags = 5)[5]).plot()
然而,由于acf实际上正在进行所有的计算,我希望得到所有的计算结果,而不仅仅是一个。这样我就可以将这个返回的数组/列表解包成一堆列,分别绘制每个列,但不必经过
acf
那么多不必要的时间。所以我试着:

df.rolling(window = 10).apply(lambda x: list(acf(x, nlags = 5)))
这会引发以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-63-e5f337100eb5> in <module>()
----> 1 df.rolling(window = 10).apply(lambda x: list(acf(x, nlags = 5)))

/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in apply(self, func, args, kwargs)
    861     @Appender(_shared_docs['apply'])
    862     def apply(self, func, args=(), kwargs={}):
--> 863         return super(Rolling, self).apply(func, args=args, kwargs=kwargs)
    864 
    865     @Substitution(name='rolling')

/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in apply(self, func, args, kwargs)
    619 
    620         return self._apply(f, func, args=args, kwargs=kwargs,
--> 621                            center=False)
    622 
    623     def sum(self, **kwargs):

/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in _apply(self, func, name, window, center, check_minp, how, **kwargs)
    556 
    557             if values.ndim > 1:
--> 558                 result = np.apply_along_axis(calc, self.axis, values)
    559             else:
    560                 result = calc(values)

/Users/a/anaconda3/lib/python3.5/site-packages/numpy/lib/shape_base.py in apply_along_axis(func1d, axis, arr, *args, **kwargs)
     89     outshape = asarray(arr.shape).take(indlist)
     90     i.put(indlist, ind)
---> 91     res = func1d(arr[tuple(i.tolist())], *args, **kwargs)
     92     #  if res is a number, then we have a smaller output array
     93     if isscalar(res):

/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in calc(x)
    553 
    554                 def calc(x):
--> 555                     return func(x, window, min_periods=self.min_periods)
    556 
    557             if values.ndim > 1:

/Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py in f(arg, window, min_periods)
    616             minp = _use_window(min_periods, window)
    617             return algos.roll_generic(arg, window, minp, offset, func, args,
--> 618                                       kwargs)
    619 
    620         return self._apply(f, func, args=args, kwargs=kwargs,

pandas/algos.pyx in pandas.algos.roll_generic (pandas/algos.c:51581)()

TypeError: a float is required
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 df.滚动(窗口=10).应用(lambda x:list(acf(x,nlags=5)))
/应用中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(self、func、args、kwargs)
861@Appender(_shared_docs['apply']))
862定义应用(self、func、args=()、kwargs={}):
-->863返回超级(滚动,自)。应用(func,args=args,kwargs=kwargs)
864
865@Substitution(name='rolling')
/应用中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(self、func、args、kwargs)
619
620返回自应用(f,func,args=args,kwargs=kwargs,
-->621中心=错误)
622
623定义和(自身,**kwargs):
/用户/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py在应用中(self、func、name、window、center、check、minp、how、**kwargs)
556
557如果values.ndim>1:
-->558结果=np。沿_轴应用_(计算、自轴、值)
559其他:
560结果=计算值(数值)
/用户/a/anaconda3/lib/python3.5/site-packages/numpy/lib/shape_base.py沿_轴应用(func1d、axis、arr、*args、**kwargs)
89外形=阵列(阵列形状)。采用(indlist)
90 i.put(indlist,ind)
--->91 res=func1d(arr[tuple(i.tolist())],*args,**kwargs)
92#如果res是一个数字,那么我们有一个较小的输出数组
93如果是isscalar(res):
/计算中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(x)
553
554 def calc(x):
-->555返回函数(x,窗口,最小周期=自最小周期)
556
557如果values.ndim>1:
/f中的Users/a/anaconda3/lib/python3.5/site-packages/pandas/core/window.py(参数、窗口、最小周期)
616最小值=_使用_窗口(最小周期,窗口)
617返回算法roll_generic(参数、窗口、最小值、偏移量、函数、参数、,
-->618克瓦格)
619
620返回自应用(f,func,args=args,kwargs=kwargs,
pandas.algos.roll_generic(pandas/algos.c:51581)()中的pandas/algos.pyx
TypeError:需要浮点

这是否意味着使用
rolling
apply
样式操作只能处理浮动?至少对于
groupby
我经常有机会返回列表或集合,但可能
rolling
没有那么灵活?

要绘制acf结果,您可能需要尝试:

从statsmodels.graphics导入
tsaplots.plot_acf(x,滞后=5,α=0.05)

要绘制acf结果,您可能需要尝试:

从statsmodels.graphics导入
tsaplots.plot_acf(x,滞后=5,α=0.05)