folium绘制Choropleth分级统计图报NoneType对象不可下标错误如何解决
问题排查与解决方案
- 参数拼写错误:folium.Choropleth指定数据列的参数为
columns,你的代码中误写为column,缺少末尾的s,导致程序读取列配置时拿到None值,触发下标访问报错,这是本次报错的直接原因。 - 列名大小写不匹配:你提到CSV中数值列名为
Count(首字母大写),但代码中筛选列、传入参数时都用了小写的count,会导致读取不到对应列,后续数值匹配失败。 - GeoJSON属性路径错误:
key_on参数需要指定GeoJSON中匹配字段的完整路径,你使用的GeoJSON数据中alpha2属于feature的properties属性,因此不能直接写alpha2,需要补全路径为feature.properties.alpha2。 - 数据未聚合:你的原始数据每个联系人对应一行,同一国家会存在多条记录,Choropleth需要每个地理区域仅对应唯一数值,因此需要提前按国家编码分组求和Count列,避免数据匹配异常。
修正后参考代码
import pandas as pd import requests import folium # 读取数据 df = pd.read_csv(r"file with some data and a column of alpha_2 country codes.csv") # 统一列名小写,避免大小写匹配问题 df.columns = df.columns.str.lower() # 按国家编码分组求和count,得到每个国家的总数值 map_data = df.groupby('alpha_2_code', as_index=False)['count'].sum() # 获取GeoJSON geojson_url = ("https://raw.githubusercontent.com/stefangabos/world_countries/master/data/en/world.json") response = requests.get(geojson_url) geojson = response.json() # 绘制地图 M = folium.Map(location = [20,10], zoom_start = 2) folium.Choropleth( geo_data=geojson, data=map_data, # 修正参数名column→columns columns = ["alpha_2_code","count"], # 补全属性路径 key_on="feature.properties.alpha2", fill_color="BuPu", fill_opacity=0.7, line_opacity=0.2 ).add_to(M)
内容的提问来源于stack exchange,提问作者Cragglecat
相关产品推荐
相关产品推荐

