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

使用Seaborn汇总数据绘箱线图遇ValueError,请求排查问题

问题排查与修正

错误原因

触发ValueError: Cannot subset columns with a tuple with more than one element. Use a list instead的直接原因是你注释掉的groupby代码中,多列选择用了元组而非列表:

# 错误写法(元组)
sum_values = grouped_data['Utilities', 'Rental', 'Salary'].sum()
# 正确写法(列表)
sum_values = grouped_data[['Utilities', 'Rental', 'Salary']].sum()

不过这段代码已被注释,当前运行的代码未执行它,但你的核心需求(汇总同一type下各category的总金额后绘制箱线图)也未实现——当前代码直接用原始的单条记录amount值绘图,不符合你要展示每年Operating/Development总金额分布的预期。

修正步骤

  1. 按type和financial_year分组,汇总每组的amount总和,得到每年各类型的总费用数据;
  2. 基于汇总后的数据绘制箱线图,移除重复的绘图逻辑(当前代码同时调用sns.boxplot和sns.countplot会覆盖绘图区域)。

完整修正代码

import seaborn as sns 
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
expense_df = pd.read_csv("Expenses.csv")

# 按type和financial_year分组,汇总amount总和
summary_df = expense_df.groupby(['type', 'financial_year'], as_index=False)['amount'].sum()
# 筛选目标类型
summary_df = summary_df[summary_df['type'].isin(['Operating','Development'])]

# 绘制箱线图
fig, ax = plt.subplots(figsize=(7, 7))
sns.boxplot(
    y='amount', 
    x='financial_year', 
    hue='type',
    data=summary_df, 
    palette="colorblind",
    ax=ax
)

# 设置x轴标签旋转
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")
plt.tight_layout()
plt.show()

说明

  • 分组汇总时用as_index=False保证结果为DataFrame格式,方便后续绘图;
  • 代码自动聚合了同一type+年份下所有category的金额,符合你汇总后绘制箱线图的需求;
  • 移除了多余的countplot,仅保留箱线图实现预期展示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:39