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

从Excel加载DataFrame千位分隔符异常及Streamlit绘图问题求助

解决千位分隔符显示异常的方案

问题出在Plotly默认使用系统区域设置的数值格式(拉美地区通常用逗号作千位分隔符、点作小数分隔符),和你期望的点作为千位分隔符冲突。以下是具体解决步骤:

1. 修正绘图数据逻辑(关键前提)

你当前代码中用df[variables].unique()获取y轴数据,会导致每个地区对应多个零散值,绘图逻辑不合理。先按DEPARTAMENTO分组汇总数据:

# 按地区分组,对数值列求和(根据需求可换成mean等其他聚合方式)
df_grouped = df.groupby('DEPARTAMENTO').sum(numeric_only=True).reset_index()

2. 强制设置Plotly数值格式

在绘图时,为轴刻度和悬停文本指定千位分隔符为点的格式:

columnas = [col for col in df.columns if col not in ['DEPARTAMENTO', 'MUNICIPIO']]

variables = st.sidebar.selectbox('Selecciona variable 1', columnas)
variables2 = st.sidebar.selectbox('Selecciona variable 2', columnas)

# 使用分组后的数据绘图
Grafico1 = go.FigureWidget()
Grafico1.add_scatter(
    x=df_grouped['DEPARTAMENTO'],
    y=df_grouped[variables],
    name=variables,
    mode='lines+markers',
    # 自定义悬停文本格式:千位分隔符用点,无小数位
    hovertemplate='%{x}<br>%{y:.,0f}<extra>%{name}</extra>'
)
Grafico1.add_bar(
    x=df_grouped['DEPARTAMENTO'],
    y=df_grouped[variables2],
    name=variables2,
    hovertemplate='%{x}<br>%{y:.,0f}<extra>%{name}</extra>'
)

Grafico1.update_layout(
    title=f'{variables} vs. {variables2}',
    margin=dict(l=10, r=10, b=10, t=40, pad=5),
    paper_bgcolor='rgba(50, 50, 50, 0.5)',
    # 设置y轴刻度的数值格式
    yaxis=dict(tickformat='.,0f')
)

st.plotly_chart(Grafico1, use_container_width=True)

3. 验证数据加载正确性

确认pandas已正确将带点分隔符的数值解析为数值类型(而非字符串),可在加载数据后添加:

print(df.dtypes)

若数值列显示为int64或float64则正常,若为object则需检查pd.read_excel的参数是否正确(当前设置的thousands='.'是正确的)。


内容的提问来源于stack exchange,提问作者Andrés Tolosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:12:02