Python:rolling.apply() 给出 TypeError

Posted

技术标签:

【中文标题】Python:rolling.apply() 给出 TypeError【英文标题】:Python: rolling.apply() gives TypeError 【发布时间】:2020-01-15 04:24:18 【问题描述】:

我的功能:

def f(x):
    print(len(x)) 
    return

test.set_index('exchTstamp',inplace=True)
test['fit_x'].rolling('1.0S').apply(lambda x: f(list(x)))

在时间索引数据帧上运行以下代码时,我收到以下错误:

> TypeError                                 Traceback (most recent call
> last) <ipython-input-151-4de6334ec332> in <module>()
> ----> 1 g=testTbt['fit_x'].rolling('1.0S').apply(lambda x: f(list(x)))
> 
> /usr/lib64/python2.7/site-packages/pandas/core/window.pyc in
> apply(self, func, raw, args, kwargs)    1701     def apply(self, func,
> raw=None, args=(), kwargs=):    1702         return super(Rolling,
> self).apply(
> -> 1703             func, raw=raw, args=args, kwargs=kwargs)    1704     1705     @Substitution(name='rolling')
> 
> /usr/lib64/python2.7/site-packages/pandas/core/window.pyc in
> apply(self, func, raw, args, kwargs)    1010     1011         return
> self._apply(f, func, args=args, kwargs=kwargs,
> -> 1012                            center=False, raw=raw)    1013     1014     def sum(self, *args, **kwargs):
> 
> /usr/lib64/python2.7/site-packages/pandas/core/window.pyc in
> _apply(self, func, name, window, center, check_minp, **kwargs)
>     878                     result = np.apply_along_axis(calc, self.axis, values)
>     879                 else:
> --> 880                     result = calc(values)
>     881 
>     882             if center:
> 
> /usr/lib64/python2.7/site-packages/pandas/core/window.pyc in calc(x)
>     872                 def calc(x):
>     873                     return func(x, window, min_periods=self.min_periods,
> --> 874                                 closed=self.closed)
>     875 
>     876             with np.errstate(all='ignore'):
> 
> /usr/lib64/python2.7/site-packages/pandas/core/window.pyc in f(arg,
> window, min_periods, closed)    1007             return
> libwindow.roll_generic(    1008                 arg, window, minp,
> indexi,
> -> 1009                 closed, offset, func, raw, args, kwargs)    1010     1011         return self._apply(f, func, args=args,
> kwargs=kwargs,
> 
> pandas/_libs/window.pyx in pandas._libs.window.roll_generic()
> 
> TypeError: a float is required

我基本上想在滚动基础上进行一些计算,例如计算指数移动平均线。请让我知道我哪里出错了。

资料可以查到here

【问题讨论】:

我对@9​​87654325@ 不太擅长,但您似乎希望有函数f 来返回一个值。 尝试删除 .0 并使用 1s insted KeyError: 'fit_x' 您在使用rolling 时将len(x) 应用于整个数据框,因为您有多个列。你的目标到底是什么?因为现在没有意义 另外,您确定您的列exchTstamp 正确输入到datetime64 pandas 类型吗?读取 csv 时,可以使用参数 parse_dates 和如果需要 date_parser (read_csv documentation) 来完成。 【参考方案1】:

您似乎希望使用函数f 来返回一个值。 applymap 类似,需要返回一个值。

【讨论】:

以上是关于Python:rolling.apply() 给出 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

pandas.series.rolling.apply 方法似乎将 Series 隐式转换为 numpy 数组

为啥调用 python 列表的 [-1] 会给出这个输出? [复制]

导入python函数给出ModuleNotFoundError [重复]

为啥 printf() 在 python 中给出一个奇怪的输出?

在 Python 中训练后,神经网络没有给出预期的输出

python在powershell中运行脚本给出'非utf'错误[重复]