folium Choropleth报错b'no arguments in initialization list'技术求助
解决folium Choropleth报错:
b'no arguments in initialization list' 刚碰到过类似的问题,这个错误大多是folium解析地理数据时出了兼容问题,结合你的代码和场景,给你几个具体的修复步骤:
先检查并转换坐标系
folium默认使用WGS84(EPSG:4326)坐标系,如果你的shapefile是其他坐标系(比如UTM),直接传入GeoDataFrame会触发解析错误。先转成支持的坐标系:import geopandas as gpd # 加载shapefile upz_bogota_hurtos = gpd.read_file("你的shapefile文件路径") # 转换到folium兼容的坐标系 upz_bogota_hurtos = upz_bogota_hurtos.to_crs(epsg=4326)显式将GeoDataFrame转为GeoJSON传入
虽然folium文档说支持直接传GeoDataFrame,但实际使用时偶尔会有兼容性问题,转成GeoJSON字符串就能解决这个初始化错误:mymap = folium.Map(location=[4.651751,-74.099199],zoom_start=12, tiles="OpenStreetMap", min_zoom=11,max_zoom=14) # 把GeoDataFrame转成GeoJSON格式 geo_json = upz_bogota_hurtos.to_json() folium.Choropleth( geo_data=geo_json, name="Choroplet", data=upz_bogota_hurtos, columns=["UPlNombre","Cantidad"], key_on="features.properties.UPlNombre", fill_color="YlGn", fill_opacity=1, line_opacity=0.2, legend_name='Cantidad de hurtos a personas' ).add_to(mymap) mymap核对字段名是否完全匹配
要确保columns里的UPlNombre和key_on指向的features.properties.UPlNombre拼写、大小写完全一致。可以打印GeoDataFrame的列名确认:print(upz_bogota_hurtos.columns)如果字段名实际是小写或者有拼写差异,记得同步修改
columns和key_on里的对应值。验证地理数据和数值数据的关联
最后检查下UPlNombre字段在地理数据和数值数据里是否一一对应,有没有缺失的条目。可以用merge验证:# 假设你的数值数据是单独的DataFrame,比如命名为hurtos_stats merged = upz_bogota_hurtos.merge(hurtos_stats, on="UPlNombre", how="left") # 查看有没有缺失的数值 print(merged["Cantidad"].isna().sum())如果有缺失值,要么补充数据,要么处理掉这些不匹配的条目,避免渲染失败。
内容的提问来源于stack exchange,提问作者Alexis AG
相关产品推荐
相关产品推荐

