Pandas对DataFrame分组后求horsepower列均值报错,min/max正常如何解决
问题原因
报错DataError: No numeric types to aggregate的根本原因是horsepower列的数据类型为字符串(object)类型,不支持数值类聚合运算:
- auto_mpg公开数据集的
horsepower列存在缺失值,原始数据用?字符填充,pandas默认读取时会将整列判定为object类型 - min、max聚合支持对字符串类型执行(按字符编码比较大小),因此你之前的代码可以正常运行;但mean属于数值运算,无法对字符串类型的列执行,因此抛出异常。
你可以先执行print(df['horsepower'].dtype)查看列的类型,确认是否为object类型验证上述判断。
解决步骤
- 读取数据时直接识别异常填充值为空值
import pandas as pd df = pd.read_csv('auto_mpg.csv', na_values='?')
- 显式将
horsepower列转换为数值类型,转换失败的值自动设为空值
df['horsepower'] = pd.to_numeric(df['horsepower'], errors='coerce')
- 执行原有的分组聚合逻辑即可正常得到均值结果
df.groupby(['cylinders','model year']).agg({'horsepower':'mean'})
内容的提问来源于stack exchange,提问作者Md Firdaus Alam
相关产品推荐
相关产品推荐

