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

Jupyter/Colab使用folium添加地图标记触发RecursionError求助

问题根因

这个递归报错和递归深度阈值设置没有任何关系,本质是两处代码逻辑错误触发了folium内部的无限循环遍历:

  • 第一处是Marker创建的代码逻辑写反、括号配对错误:你写的icon = folium.Icon(color= color).add_to(stl_crime_street),会先把图标对象直接加到地图上,而add_to()方法的返回值是传入的父对象也就是地图实例stl_crime_street,相当于给Marker的icon参数传了整个地图对象。folium内部做元素结构扁平化遍历的时候,会顺着引用无限循环:读取Marker的icon属性→拿到整个地图→遍历地图下的所有子元素→读到当前正在创建的Marker→再读Marker的icon→又拿到整个地图,直接触发无限递归导致栈溢出。
  • 第二处是map_data构造时的拼接逻辑错误:你直接用pd.concat按行索引做内连接拼接,但df[['address']]用的是原始DataFrame的行索引,PB_index是重置过的从0开始的连续索引,两者索引不对齐,拼出来的结果里地址、经纬度、计数三个字段完全错位,就算不报错点位信息也完全对不上。
修复方案

1. 修正点位添加的代码逻辑

不要给Icon单独调用add_to,正确流程是先组装好Marker的所有参数(包括Icon实例),再把整个Marker加到地图上,修正后的循环代码如下:

for i in range(10):
    lat = map_data['LATLNG'].iloc[i][0]
    long = map_data['LATLNG'].iloc[i][1]
    location = map_data['address'].iloc[i]
    count = map_data['ValueCount'].iloc[i]

    if count > 150:
        color = 'red'
    elif count >= 100:
        color = 'orange'
    else:
        color = 'blue'
    
    popup_text = """
                Location: {}<br>
                Peace Disruptions : {}<br>""".format(location, count)
    # 正确写法:icon参数传Icon实例,Marker创建完成后再add到地图
    folium.Marker(
        location=[lat, long],
        popup=popup_text,
        icon=folium.Icon(color=color)
    ).add_to(stl_crime_street)

2. 修正map_data的拼接逻辑

不要直接靠行索引拼接,先把原始df的地址和经纬度做去重对应,再和计数结果按字段合并,保证三个字段属于同一点位,修正后的构造代码如下:

# 统计每个经纬度的事件频次并重置列名
unique_locations = df['LATLNG'].value_counts().reset_index()
unique_locations.columns = ['LATLNG', 'ValueCount']
# 提取每个经纬度对应的唯一地址,避免索引错位
location_addr = df[['LATLNG', 'address']].drop_duplicates(subset=['LATLNG'])
# 按LATLNG字段做匹配合并,而非按行索引硬拼
map_data = pd.merge(unique_locations, location_addr, on='LATLNG', how='left')
# 验证前10条数据正确性
map_data_head = map_data[:10]
print(map_data.head())

注意:不要靠调高递归深度阈值解决这类问题,只要是逻辑错误导致的无限递归,不管阈值设多高最终都会触发栈溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:09:21