从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
相关产品推荐
相关产品推荐

