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

绘制奥迪等品牌汽车每英里转速箱线图时遇UFuncTypeError错误求助

问题描述

尝试为奥迪(Audi)、现代(Hyundai)、铃木(Suzuki)和丰田(Toyota)四个汽车品牌绘制每英里转速(Rev.per.mile)的箱线图时,遇到以下错误:

UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U4'), dtype('int64')) -> None

使用的代码如下:

car_data_1 = car_data[(car_data["Manufacturer"] == "Audi") | (car_data["Manufacturer"] == "Hyundai") | 
    (car_data["Manufacturer"] == "Suzuki") | (car_data["Manufacturer"] == "Toyota")]

plt.boxplot(car_data_1.groupby("Manufacturer")["Rev.per.mile"], labels=["Audi", "Hyundai", "Suzuki", "Toyota"])
plt.title("Revs per mile for Audi, Hyundai, Suzuki and Toyota cars")
plt.xlabel("Car Manufacturer")
plt.ylabel("Revs per mile")
plt.show()

已尝试修改数据类型,但仍出现相同错误。

解决方案

问题根源

  1. plt.boxplot需要接收数值数组/列表的序列作为输入,直接传入pandas的GroupBy对象会触发类型不兼容的运算错误;
  2. Rev.per.mile列大概率存在字符串类型数据(比如包含非数字字符),导致和整数类型运算时类型不匹配。

修复步骤

1. 清洗并转换数据类型

先处理Rev.per.mile列的格式问题,将其转为数值类型并剔除无效值:

import pandas as pd
import matplotlib.pyplot as plt

# 转换Rev.per.mile为数值类型,无法转换的设为NaN
car_data["Rev.per.mile"] = pd.to_numeric(car_data["Rev.per.mile"], errors="coerce")
# 删除含空值的行
car_data = car_data.dropna(subset=["Rev.per.mile"])

2. 提取分组数据并绘制箱线图

筛选目标品牌后,提取每个品牌的转速数值列表传入boxplot:

target_brands = ["Audi", "Hyundai", "Suzuki", "Toyota"]
# 筛选目标品牌数据
car_data_1 = car_data[car_data["Manufacturer"].isin(target_brands)]

# 提取每个品牌的转速数据数组
grouped_data = [
    car_data_1[car_data_1["Manufacturer"] == brand]["Rev.per.mile"].values 
    for brand in target_brands
]

# 绘制箱线图
plt.boxplot(grouped_data, labels=target_brands)
plt.title("各品牌车辆每英里转速对比")
plt.xlabel("汽车品牌")
plt.ylabel("每英里转速")
plt.show()

也可以通过GroupBy的apply方法简化数据提取:

grouped_data = car_data_1.groupby("Manufacturer")["Rev.per.mile"].apply(list).values
plt.boxplot(grouped_data, labels=target_brands)
# 后续绘图代码同上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:45:12