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

Pandas滚动窗口apply报错TypeError:需实数而非NoneType求助

报错原因与解决方案

报错原因

  1. lambda返回值不符合要求:rolling().apply()中使用的lambda r: print(r)返回None,而pandas的滚动窗口apply要求每个窗口计算必须返回实数(int/float),None类型触发了类型错误。
  2. 存在缺失值:candidates列有10949个NaN,滚动窗口包含NaN时,会干扰数值计算逻辑,即使修正返回值问题,也可能导致结果异常。

解决方法

1. 替换无效的lambda逻辑

将用于调试的print(r)替换为实际业务需要的数值计算,比如窗口均值、求和等:

# 示例:计算7天窗口的均值
rolling_result = df_price_population.groupby(['danji_id', 'area1'])['candidates'].rolling(window=7).apply(lambda r: r.mean())

2. 处理缺失值

根据业务场景选择以下方式:

方式一:填充缺失值(保留数据)

  • 按分组填充组内均值:
df_price_population['candidates'] = df_price_population.groupby(['danji_id', 'area1'])['candidates'].transform(lambda x: x.fillna(x.mean()))
  • 时序数据可使用前向填充:
df_price_population['candidates'] = df_price_population.groupby(['danji_id', 'area1'])['candidates'].fillna(method='ffill')

方式二:删除含缺失值的行

df_price_population = df_price_population.dropna(subset=['candidates'])

完整流程示例

# 第一步:处理缺失值
df_price_population['candidates'] = df_price_population.groupby(['danji_id', 'area1'])['candidates'].transform(lambda x: x.fillna(x.mean()))

# 第二步:执行滚动窗口计算
rolling_result = df_price_population.groupby(['danji_id', 'area1'])['candidates'].rolling(window=7).apply(lambda r: r.mean())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:45:35