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

Pandas groupby agg()函数处理非数值列报错及合并聚合结果的语法疑问

Pandas groupby agg()函数处理非数值列报错及合并聚合结果的语法疑问

嘿,我来帮你理清楚这个问题,核心其实是Pandas版本差异加上agg()函数的使用技巧,咱们一步步拆解:

首先,关于agg()为什么没有numeric_only参数的疑问

你观察得很对——单独调用mean()、max()这些聚合方法时能加numeric_only=True,但早期版本的Pandas(大概1.3.0之前)里,agg()确实没有这个参数。这是Pandas API演进的问题:后来官方为了统一聚合方法的参数,才给agg()补上了numeric_only支持。这也是你和课程内容出现差异的关键:课程用的是旧版本Pandas,所以会报错;而你的IDE里版本较新,单独调用mean()/max()没问题,但直接用课程里的agg()代码,旧版本会因为尝试对非数值列(比如rings、magnetic_field这些字符串列)执行数学运算而报错。

解决办法:两种方式实现一次性聚合并只处理数值列

你想要把mean和max的结果合并到同一个DataFrame里,不用分开跑两次,有两个靠谱的方案:

方案1:先筛选数值型列(兼容所有Pandas版本)

先把数据里的数值列挑出来,再做groupby聚合,这样完全避开非数值列的干扰,不管版本都能用:

import numpy as np
import pandas as pd
data = {'planet': ['Mercury', 'Venus', 'Earth', 'Mars',
                   'Jupiter', 'Saturn', 'Uranus', 'Neptune'],
        'radius_km': [2440, 6052, 6371, 3390, 69911, 58232,
                     25362, 24622],
        'moons': [0, 0, 1, 2, 80, 83, 27, 14],
        'type': ['terrestrial', 'terrestrial', 'terrestrial', 'terrestrial',
                 'gas giant', 'gas giant', 'ice giant', 'ice giant'],
        'rings': ['no', 'no', 'no', 'no', 'yes', 'yes', 'yes','yes'],
        'mean_temp_c': [167, 464, 15, -65, -110, -140, -195, -200],
        'magnetic_field': ['yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes'] }

planets = pd.DataFrame(data)

# 筛选所有数值类型的列
numeric_cols = planets.select_dtypes(include=[np.number]).columns
# 只对数值列执行groupby聚合
P = planets.groupby(['type', 'magnetic_field'])[numeric_cols].agg(['mean', 'max'])
print(P)

方案2:直接给agg()加numeric_only=True(适用于Pandas 1.3.0+)

如果你的Pandas版本是1.3.0或更高,直接在agg()里加这个参数就行,它会自动忽略非数值列,和你单独调用mean(numeric_only=True)的效果一致,而且能一次性输出合并结果:

P = planets.groupby(['type', 'magnetic_field']).agg(['mean', 'max'], numeric_only=True)
print(P)

关于课程里的sum()补丁的补充

课程里要求给sum()加numeric_only=True,也是因为旧版本Pandas里,sum()会尝试对字符串列做拼接(就像你看到的那样),而旧版本的默认行为不是只处理数值列,所以需要手动指定参数避免意外结果或报错。你的新版本Pandas可能已经调整了默认行为,所以不加也不会报错,但加上更稳妥。

这样两种方案都能让你高效得到合并的聚合结果,不用分开跑两次mean和max啦~

备注:内容来源于stack exchange,提问作者Rodney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:18:04