Pandas groupby计算中位数报错原因及解决方案咨询
Pandas 2.x groupby.median()类型错误问题分析与解决
报错原因
Pandas 2.0版本对聚合函数的行为做了重大调整:在1.x旧版本中,groupby.median()默认只对数值类型列执行计算,会自动跳过字符串等非数值列;但从2.0开始,这类聚合函数默认会遍历DataFrame的所有列,尝试对每一列执行中位数计算。你的DataFrame里包含gender这类非数值字符串列,以及字符串类型的"数值列",这些列无法计算中位数,因此触发类型错误。
解决方法
你可以通过两种方式修复这个问题:
1. 明确指定要计算的目标列
直接在groupby后指定需要计算中位数的int64列,只对目标列执行聚合:
# 替换target_int_column为你实际的int64列名 data.groupby('class')['target_int_column'].median()
2. 使用numeric_only=True参数
这个参数会让Pandas回归旧版本的行为,只对数值类型列执行中位数计算,自动跳过非数值列:
data.groupby('class').median(numeric_only=True)
额外说明
如果你的字符串类型"数值列"也需要参与中位数计算,需要先将其转换为数值类型,比如:
# 将字符串列转为int/float类型,转换失败的会设为NaN data['num_str_col'] = pd.to_numeric(data['num_str_col'], errors='coerce') # 再执行聚合 data.groupby('class').median(numeric_only=True)
内容的提问来源于stack exchange,提问作者lokalhangatt
相关产品推荐
相关产品推荐

