使用Plotly Mapbox绘制Choropleth地图时Excel数值显示为0
问题:Plotly Choropleth地图无法正确读取Excel中「Buscas」列数值,所有区域显示0
我在制作带Choropleth地图的仪表盘时,遇到了一个问题:Excel文件里的「Buscas」列数值无法被正确读取,地图所有区域都显示0。
读取Excel的代码:
df = pd.read_excel("MOVIDA.xlsx", sheet_name=0)
文件包含UF、Estado、Buscas等列,绘制地图的代码:
fig = px.choropleth_mapbox(df, locations="UF", center={"lat": -16.95, "lon": -47.78}, geojson=brazil_states, color_continuous_scale="Redor", opacity=0.5, zoom=4, color="Buscas", hover_data={"Estado": True})
补充信息:发现地图似乎取各区域的最低值,把所有0替换成其他值后就能正常显示,我原本以为Plotly会自动汇总该列的数值。
解决方案
处理重复的UF条目:Plotly的
px.choropleth_mapbox不会自动对同一locations(此处为UF)的多行数据做聚合,默认会取该分组的最小值或第一条记录值。如果你的DataFrame里同一个UF对应多条记录,必须先手动汇总「Buscas」列:# 按UF和Estado分组,对Buscas列求和(可根据需求换成mean/max等) df_agg = df.groupby(["UF", "Estado"])["Buscas"].sum().reset_index() # 使用汇总后的数据集绘制地图 fig = px.choropleth_mapbox(df_agg, locations="UF", center={"lat": -16.95, "lon": -47.78}, geojson=brazil_states, color_continuous_scale="Redor", opacity=0.5, zoom=4, color="Buscas", hover_data={"Estado": True})检查「Buscas」列数据类型:确保该列是数值类型(int/float),如果是字符串格式,Plotly无法正确解析数值,会默认显示0。可通过以下代码排查并转换:
# 查看列类型 print(df["Buscas"].dtype) # 转换为数值类型,无法转换的内容会被设为NaN df["Buscas"] = pd.to_numeric(df["Buscas"], errors="coerce")清理数据中的无效0值:如果数据本身存在大量0值,会导致颜色映射的最小值被拉到0,从而所有区域显示0。替换0值后正常显示,说明0值是干扰项,可根据业务逻辑将其替换为NaN或其他合理数值。
内容的提问来源于stack exchange,提问作者Vinicius Stanula
相关产品推荐
相关产品推荐

