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

关于pandas agg()聚合时mean函数触发DataError的技术问询

为啥agg用mean报错,sum却没事?我来给你拆解清楚

嘿,这个问题我之前踩过一模一样的坑!核心原因其实是你的c1和c2列根本不是数值类型,而是字符串(object)类型,这就导致mean没法正常计算,但sum却能“凑活”运行——不过其实sum的结果也不是你想要的数值求和哦!

先搞懂:你的数据类型为啥不对?

看你初始化DataFrame的代码:

df = pd.DataFrame(data=[list(string.ascii_lowercase)[0:5]*2,list(range(1,11)),list(range(11,21))]).T

你把三个列表转置后生成DataFrame,第一个列表是字符串(a、b这些),后面两个是整数列表。但pandas遇到混合类型的列时,会把所有列统一成object类型(也就是字符串类型)。你可以自己跑一遍print(df.dtypes)看看,c1和c2肯定显示的是object,不是int或者float。

为啥sum能跑,mean却报错?

  • 关于sum:pandas的sum对object类型的列,会直接调用元素的加法操作。对字符串来说,加法就是拼接——比如分组a的c1列是'1'和'6',sum之后会得到'16',而不是你以为的7!所以它看起来“正常运行”,但其实结果根本不是数值求和。
  • 关于mean:均值计算需要做除法,必须是数值类型才能算。字符串没法参与除法运算,pandas一看这列全是字符串,没有可用于计算均值的数值类型,直接就抛出DataError了。

怎么解决?

把c1和c2转成数值类型就行,一行代码搞定:

# 转成整数类型,要是有小数就用astype(float)
df[['c1', 'c2']] = df[['c1', 'c2']].astype(int)

转完之后再跑分组聚合:

df.groupby('g').agg({
    'c1': ['sum', 'mean'],
    'c2': ['sum', 'mean']
})

这下sum会算出正确的数值和,mean也能正常计算均值,再也不会报错啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:35:47