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

自定义平方和函数调用报错求助:pandas提示无可聚合数值类型

解决pandas rolling.apply平方和计算时的DataError问题

问题根源

  • 现有sum_of_squares函数逻辑错误:当前函数接收整数n计算1到n的平方和,但rolling.apply会把每个窗口的Series数据传入函数,而非整数参数,导致函数无法处理窗口内的实际数据。
  • 数据类型不匹配:df2的列可能不是数值类型(比如object),pandas无法对非数值型数据执行聚合操作,触发No numeric types to aggregate报错。

分步解决方案

1. 修正平方和函数

修改函数,使其接收窗口内的Series,计算每个元素的平方和:

def sum_of_squares(window_series):
    return (window_series ** 2).sum()

2. 确保数据为数值类型

先检查数据类型:

print(df2.dtypes)

如果列是object类型,转换为浮点型:

df2 = df2.astype(float)

若存在异常值(比如非数字字符串),用pd.to_numeric处理:

df2['ACCX'] = pd.to_numeric(df2['ACCX'], errors='coerce')
df2['ACCY'] = pd.to_numeric(df2['ACCY'], errors='coerce')
df2['ACCZ'] = pd.to_numeric(df2['ACCZ'], errors='coerce')
# 可选:删除转换失败产生的NaN行
df2 = df2.dropna()

3. 执行滚动窗口计算

完成上述两步后,重新运行代码:

a_energy = df2.rolling(170, step=170).apply(sum_of_squares)

额外优化(推荐)

如果不需要自定义函数,直接用pandas内置方法组合,效率更高:

a_energy = df2.pow(2).rolling(170, step=170).sum()

这种方式避免了apply的性能开销,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:52:36