Folium中Choropleth地图配置key_on参数实现东京数据映射报错
Tokyo Choropleth 地理匹配报错修正
原始报错
运行配置的绘图代码后,控制台抛出:
AttributeError: 'NoneType' object has no attribute 'get'
报错核心触发逻辑
代码报错是因为key_on参数的写法不符合folium Choropleth的内置解析规则,导致程序无法正常获取关联字段值:
- folium的Choropleth组件解析GeoJSON时,会逐一遍历单个
Feature对象完成字段匹配,key_on的路径是相对于单个Feature对象的相对路径,不需要从整个FeatureCollection的根节点开始书写路径。 - 原代码中
key_on = 'features.properties.ward_en'使用了复数features,解析器会在单个Feature对象的上下文里查找不存在的features属性,最终取到None值执行后续字典取值操作,直接触发NoneType类别的属性错误。
分步修正操作
- 第一处核心修正:调整
key_on的写法,将原参数里的复数features改为单数feature,正确路径为feature.properties.ward_en - 第二处前置校验:提前核对两边关联字段的字符串匹配度,排除空格、大小写、全半角差异导致的匹配失败,校验代码如下:
geojson_ward_set = set() for feature in tokyo_geojson['features']: # 检查每个GeoJSON要素是否存在ward_en字段,避免字段缺失 if 'ward_en' not in feature['properties']: print(f"存在缺失ward_en字段的GeoJSON要素:{feature}") continue geojson_ward_set.add(feature['properties']['ward_en'].strip()) df_ward_set = set(df_tokyo['Municipality'].str.strip()) # 输出两边无法匹配的差异值,提前处理不一致的条目 print("GeoJSON存在但DataFrame无对应值的要素:", geojson_ward_set - df_ward_set) print("DataFrame存在但GeoJSON无对应要素的条目:", df_ward_set - geojson_ward_set) - 第三处基础校验:确认GeoJSON加载状态正常,检查
tokyo_geojson是否为合法的GeoJSON字典结构,确保可以正常访问tokyo_geojson['features'],排除文件读取失败、路径错误导致geo_data为空None的情况。
修正后可运行的代码
tokyo_map.choropleth( geo_data = tokyo_geojson, data=df_tokyo, columns=['Municipality', 'Positive Cases'], # 修正后的key_on参数 key_on = 'feature.properties.ward_en', fill_color='BuPu', threshold_scale=threshold_scale, fill_opacity=0.6, line_opacity=0.2, legend_name='Corona Cases in Tokyo', highlight = True, reset=True ) tokyo_map
补充说明:如果修正key_on参数后仍出现匹配异常,优先核对两边关联值的拼写差异,比如GeoJSON里的
ward_en是否存在多余缩写、尾缀,和DataFrame的Municipality值是否完全一致。
内容的提问来源于stack exchange,提问作者Jaswanth sai G
相关产品推荐
相关产品推荐

