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

从DataFrame绘制多柱状图时出现Key Error问题求助

问题解决:Key Error与堆叠多柱状图绘制

问题根源

你加载CSV时没把第一列(Bots/Speed这些)设为行索引,所以DataFrame里Bots不是行标签,而是第一列(默认叫Unnamed: 0)的一个值,用loc[]自然找不到,触发Key Error。

修正方案

方案1:修复索引后沿用你的逻辑

读CSV的时候加上index_col=0参数,把第一列设为行索引,这样你的loc写法就能正常工作,同时实现堆叠效果:

import pandas as pd
import matplotlib.pyplot as plt

# 关键:指定index_col=0,把第一列设为行索引
df = pd.read_csv('MAIN_DATAFRAME.csv', index_col=0)

def plot_graph_1(MAIN_DATAFRAME):
    df1 = MAIN_DATAFRAME.loc[['Bots']].transpose()
    df2 = MAIN_DATAFRAME.loc[['Speed']].transpose()
    df3 = MAIN_DATAFRAME.loc[['Weight']].transpose()
    df4 = MAIN_DATAFRAME.loc[['Chargers']].transpose()

    # 绘制堆叠柱状图,需指定stacked=True
    ax = df1.plot(kind='bar', stacked=True, label='Bots')
    df2.plot(ax=ax, kind='bar', stacked=True, label='Speed')
    df3.plot(ax=ax, kind='bar', stacked=True, label='Weight')
    df4.plot(ax=ax, kind='bar', stacked=True, label='Chargers')
    plt.legend()
    plt.show()

plot_graph_1(df)

方案2:更简洁的堆叠图写法

不用拆分四个DataFrame,直接转置原DataFrame后调用plot就能生成堆叠柱状图,代码更高效:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('MAIN_DATAFRAME.csv', index_col=0)
# 转置后,Run 1~10作为x轴,四个指标自动作为堆叠柱子
df.transpose().plot(kind='bar', stacked=True, figsize=(10,6))
plt.title('Bots/Speed/Weight/Chargers Stacked Bar Chart')
plt.xlabel('Runs')
plt.ylabel('Values')
plt.show()

额外注意点

  • 你原代码里的ax.bar(ax, df1)是错误写法,ax.bar不需要把ax作为第一个参数,且已经用pandas的plot生成了图表,这行代码可以直接删掉。
  • 如果CSV的第一列有明确列名(比如叫Metric),加载时可以用index_col='Metric'替代index_col=0,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:25:17