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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:53:09