You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas expanding/rolling窗口apply操作触发float转换TypeError原因求解

报错原因

  • pandas提供的rolling()/expanding()窗口的apply方法,要求传入的自定义函数必须返回单个标量值(比如数值、字符串等),每个窗口的计算结果会以标量形式填充到结果序列的对应位置。
  • 你示例中使用的lambda x: x,输入参数x是当前窗口对应的一维numpy数组,直接返回x属于返回数组对象,pandas无法将数组转换为预期的单个float类型值,因此触发类型报错,该报错和原始数据列的dtype没有关联,rolling窗口触发报错的原因和expanding完全一致。

验证方法

你可以修改自定义函数让它返回标量,即可正常运行,示例如下:

# 计算每个expanding窗口的最大值
df.a.expanding(2).apply(lambda x: x.max())
# 输出
0      NaN
1     20.0
2    200.0
3    200.0
Name: a, dtype: float64

特殊场景处理

如果你确实需要保留每个窗口的完整数组内容,可以将返回值封装为单个元组/列表对象,避免触发标量转换校验:

res = df.a.expanding(2).apply(lambda x: (x,))
print(res.iloc[1])
# 输出 (array([ 1., 20.]),)

内容的提问来源于stack exchange,提问作者Mittenchops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:09:02