You need to enable JavaScript to run this app. pandas调用rolling计算移动平均报缺少self参数的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

pandas调用rolling计算移动平均报缺少self参数的问题咨询

报错根因

rolling()是pandas中Series、DataFrame对象的实例方法,不是可以脱离具体数据直接调用的类静态方法。这类方法在调用时,Python会自动把当前关联的数据实例作为self参数传入,完全不需要手动传值。
你完全不需要手动考虑self参数的传入逻辑,也不需要对rolling做任何额外的初始化操作。你当前的代码绕开了要计算的bidclose列本身,直接在pd.Series类层面调用rolling()方法,Python拿不到必须的self入参,因此触发了TypeError: rolling() missing 1 required positional argument: 'self'的错误。

正确调用逻辑
  • 把rolling()方法的调用挂到要计算的目标序列实例上,pandas会自动把该序列作为self传入窗口构造逻辑
  • 窗口大小、居中规则等配置参数,直接作为rolling()方法的入参传入即可
  • 调用完rolling()生成窗口对象后,直接接.mean()计算均值即可,不需要再把原序列、窗口大小作为参数传给聚合方法
修正后的可运行代码
# 计算50日、200日移动均线:直接在bidclose列上链式调用方法
df['ma50'] = df['bidclose'].rolling(window=50, center=False).mean()
df['ma200'] = df['bidclose'].rolling(window=200, center=False).mean()
# 绘制对比图逻辑和原代码一致
plots = df[['bidclose', 'ma50', 'ma200']].plot(subplots=False, figsize=(10, 4))
plt.show()
常见调用误区
  • 不要在类层面直接写pd.Series.rolling(参数),这种写法无法关联到你要计算的具体数据,必然触发self参数缺失的报错
  • 不要在调用.mean()时重复传入原序列、窗口大小参数,这些配置在创建rolling窗口时已经固化,额外传参反而会引发新的类型错误
  • 如果确实需要手动构造Rolling对象,也必须把目标序列作为第一个入参传入,比如pd.core.window.Rolling(df['bidclose'], window=50).mean(),但这种写法属于冗余操作,没有实际使用价值

内容的提问来源于stack exchange,提问作者s.alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 22:54:03