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

首次使用folium绘制邮政编码分级统计图报IndexError该如何解决

错误根因

你当前遇到的IndexError是因为folium.Choropleth的columns参数要求必须传入包含两个元素的列表:第一个是用来和GeoJSON属性匹配的关联列(也就是你的邮编列),第二个是用来给区域分级染色的数值列。你只传了一个列,folium内部尝试读取第二个列时就触发了索引越界错误。

问题排查&解决步骤

  • 首先明确你要用来做分级染色的数值指标:分级统计图的核心是用不同颜色展示不同邮编区域的某个数值差异,比如每个邮编的工单数量、平均配送时长、人口密度等,你需要先确定这个指标对应的列。
  • 如果你要展示的是每个邮编对应的慢处理工单数量,首先对数据框做聚合得到数值列:
# 统计每个邮编对应的慢处理工单数,生成新的数值列slow_case_count
slow_agg = slow_to_resolve['zipcode'].value_counts().reset_index(name='slow_case_count')
  • 调整Choropleth参数的columns为两个元素,第一个是关联列,第二个是染色用的数值列:
folium.Choropleth(
    geo_data='../data/tn_tennessee_zip_codes_geo.min.json',
    data=slow_agg, # 用聚合后的新数据框
    columns=['zipcode', 'slow_case_count'], # 必须传两个列
    key_on='feature.properties.ZCTA5CE10',
    fill_color='BuPu', 
    fill_opacity=0.7, 
    line_opacity=0.2,
    legend_name='慢处理工单数量' # 图例名称对应你的染色指标
).add_to(nash_map)

folium.LayerControl().add_to(nash_map)
nash_map
  • 额外注意邮编格式匹配问题:GeoJSON中的ZCTA5CE10字段是字符串格式的5位邮编,你需要确保数据框中的zipcode和它格式完全一致,比如如果你的zipcode是整数类型,需要转成字符串并补全前导零:
# 把邮编转成5位字符串,避免0开头的邮编丢失前导零导致匹配失败
slow_agg['zipcode'] = slow_agg['zipcode'].astype(str).str.zfill(5)

之前isnan报错的解决

你之前传两列报isnan相关错误,是因为你选的第二列是字符串类型,folium的分级染色逻辑只支持数值类型的列,只要你把第二列换成数值类型(比如上面聚合得到的工单计数字段)就可以解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:07