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

Dash+Plotly多折线图报错KeyError:'variable'求助

解决Dash+Plotly Express绘制多折线图时的KeyError: 'variable'问题

我来帮你分析这个错误的原因和解决办法:

错误原因

这个KeyError: 'variable'本质是Plotly Express在处理多折线(多y列)时的自动数据转换逻辑出了问题。当你给px.line传入多个y列(比如y=["Confirmed","Deaths", "Recovered"])时,Plotly会自动把你的宽格式数据转成长格式,生成一个叫variable的列来区分不同的折线系列。但在你的代码场景中,这个自动转换过程没有成功生成variable列,导致后续绘图时找不到这个字段,触发了KeyError。

解决方法

方法一:手动转换数据格式(推荐,更稳定可控)

与其依赖Plotly的自动转换,不如手动把宽格式数据转成长格式,这样能完全掌控数据结构,避免自动转换的bug。修改你的update_graph函数如下:

def update_graph(value):
    df = covid_19_data[covid_19_data.Country == value]
    df = df.groupby(['Last_Update']).sum().reset_index()
    
    # 手动将宽格式数据转为长格式
    df_melted = df.melt(
        id_vars='Last_Update',  # 保留时间轴列
        value_vars=["Confirmed", "Deaths", "Recovered"],  # 需要转为折线的数值列
        var_name='variable',  # 定义分类列名(对应折线的区分标识)
        value_name='value'  # 定义数值列名
    )
    
    # 用转换后的长格式数据绘图
    fig = px.line(
        df_melted,
        x="Last_Update",
        y="value",
        color="variable",  # 通过variable列区分不同折线
        labels={"value": "count", "variable": "color coding"}
    )
    fig.update_layout(
        yaxis={'title':'# of Cases'},
        title={'text':'Number of confirmed Covid 19 cases',
               'font':{'size':28},'x':0.5,'xanchor':'center'}  # 把xanchor改成center,标题会居中显示更美观
    )
    return fig

方法二:升级Plotly版本

如果你的Plotly Express版本比较旧,可能存在多y列处理的已知bug。尝试升级到最新版本:

pip install --upgrade plotly

额外排查点

为了避免后续出现类似问题,你可以做这两个检查:

  • 在groupby之后打印df.columns,确认Confirmed、Deaths、Recovered这三列确实存在
  • 确保Last_Update列是datetime类型,如果原始数据是字符串格式,先转换:
    df['Last_Update'] = pd.to_datetime(df['Last_Update'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:25:13