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

Folium绘制Choropleth地图报错ValueError: 字典更新序列元素长度错误

报错根因

报错是传参时的写法错误触发的:
你在初始化Choropleth类时,给geo_data、data两个参数传入的是加了引号的变量名字符串,而非提前加载好的变量本身:

  • 代码里laZip是提前通过url请求加载好的洛杉矶邮编GeoJSON对象,numStoresByZip是统计完门店数量的Pandas DataFrame对象,两个都是内存里的有效变量
  • 你写geo_data = 'laZip'、data = 'numStoresByZip'时,实际传入函数的是内容为laZip、numStoresByZip的普通字符串,不是对应的对象

对照Folium的源码逻辑:

  1. 它会先判断传入的data是否为Pandas DataFrame/Series类型,如果是就调用.to_dict()生成配色映射表
  2. 如果不是上述类型,就会执行dict(data)尝试将传入值转为字典

你传入的是普通字符串,执行dict('numStoresByZip')时,Python会把字符串拆成单个字符的序列,每个元素长度为1,不满足字典构造要求的「每个元素为长度2的键值对序列」规则,就抛出了看到的ValueError。
另外就算绕开data的报错,geo_data传字符串'laZip'也会导致后续地理边界无法正常读取,因为这个参数只接受GeoJSON对象、合法文件路径、可访问的URL,不识别自定义的变量名字符串。
你之前怀疑的fill_opacity=1参数是合法写法,和这个报错没有关系。

修复方案

去掉geo_data、data两个参数值外层的引号,直接传入提前定义好的变量即可,修正后的Choropleth调用代码如下:

folium.Choropleth(
    geo_data = laZip,
    data = numStoresByZip,
    columns = ['zipcode', 'numStores'], 
    key_on = 'feature.properties.zipcode',
    fill_color = 'YlGn', 
    fill_opacity = 1
).add_to(laMapChoro)

补充说明:你代码里用的stamenterrain底图在新版Folium中因为底图服务商迁移可能出现加载失败的问题,如果遇到底图不显示的情况,可以把Map初始化时的tiles参数换成'OpenStreetMap'等其他可用底图源,这个调整不影响Choropleth图层的渲染逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:31:02