You need to enable JavaScript to run this app. 如何在Plotly Dash回调中正确调用Dataframe类整数格式列名
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly Dash回调中正确调用Dataframe类整数格式列名

问题原因

最常见的诱因是Dash回调中DataFrame的列名类型和全局测试时不一致:
如果你是通过dcc.Store组件序列化传递DataFrame,反序列化后纯数字的列名(2018/2019等)会被默认转为整数类型,此时用字符串dfc['2018']索引自然匹配不到列;而City、TOTAL这类非数字列名类型不变,所以点式调用可以正常生效。

排查方法

在回调中读取dfc后先执行以下代码,确认列名类型:

print(dfc.columns.tolist())
print([type(col) for col in dfc.columns])

如果输出的2018等列的类型是<class 'int'>,即可确认是类型匹配问题。

修复方案

方案1:直接匹配类型调用

如果不想改列名,直接用整数作为索引调用即可:

dfc[2018]
dfc[2019]
# 以此类推

方案2:统一列名为字符串

在回调中读取dfc后先执行列名类型转换,之后就可以正常用dfc['2018']调用:

dfc.columns = dfc.columns.astype(str)

方案3:兼容点式调用

如果你想要和dfc.City一样用点式方法调用年份列,可以先给数字列加前缀重命名:

# 批量给纯数字列名加y_前缀
dfc = dfc.rename(columns=lambda x: f'y_{x}' if str(x).isdigit() else x)
# 之后即可用点式调用
dfc.y_2018
dfc.y_2019
修正后的代码示例

以你提供的表格代码为例,统一列名后的完整写法如下:

# 回调内读取dfc后首先执行列名转换
dfc.columns = dfc.columns.astype(str)

fig = go.Figure(data=[go.Table(
    header=dict(values=list(dfc.columns[1:]),
                fill_color='paleturquoise',
                align='left'),
    cells=dict(values=[dfc.City, dfc.TOTAL, dfc['2018'], dfc['2019'], dfc['2020'], dfc['2021']],
               fill_color='lavender',
               align='left'))
])

如果以上方案无效,检查回调内的dfc是否和全局测试用的dfc一致,是否存在过滤、合并操作导致年份列丢失,或dcc.Store存储时遗漏了对应列数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:36:05