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

Folium无预警崩溃,圣地亚哥公园标记绘制循环失败求助

解决folium循环标记圣地亚哥公园时崩溃/失败的问题

看起来你在给家乡圣地亚哥做公园地图标记时踩了folium的坑——循环绘制Marker莫名失败还无预警崩溃,我来帮你梳理下可能的问题和对应的解决方案:

先复盘下你的操作场景:
你通过Google Places收集了圣地亚哥公园的信息并存储在网页中,用pandas读取数据的代码是:

import pandas as pd
df = pd.read_html('http://www.quant.cl/static/HTML/parks.html', index_col=0)[0]

但执行folium循环标记的代码时出现了问题:

for did, drow in df.iterrows():
    folium.Marker(location=(drow['lat'], drow['lng']), 
                  popup='%s:%s' %(drow['name'], drow['formatted_address'])).add_to(fm)
fm.save('parques_%d.htm...

可能的原因&解决方案

1. 数据存在异常值或缺失值

这是最常见的触发问题的原因,folium对location参数的数值格式要求非常严格:

  • 先检查lat和lng列是否有NaN、非数值类型(比如字符串、空值):
    print(df[['lat', 'lng']].isna().sum())  # 查看缺失值数量
    print(df[['lat', 'lng']].dtypes)       # 查看数据类型
    
    如果有缺失值,直接删除对应行即可:
    df = df.dropna(subset=['lat', 'lng'])
    
  • 另外name或formatted_address如果有NaN,拼接popup时也会报错,建议改成容错写法:
    popup = f"{drow.get('name', '无公园名称')}:{drow.get('formatted_address', '无地址信息')}"
    

2. 未正确初始化folium地图对象

别漏了创建fm这个地图实例!如果没初始化就调用add_to(fm),肯定会报错崩溃。记得先完成初始化:

import folium

# 圣地亚哥的大致中心坐标,你可以根据实际情况调整
fm = folium.Map(location=[-33.4569, -70.6483], zoom_start=12)

3. iterrows()效率低且易出bug

iterrows()在处理大数据量时不仅速度慢,还可能因为行数据的类型转换问题触发崩溃。建议换成更稳定高效的itertuples():

for row in df.itertuples():
    folium.Marker(
        location=(row.lat, row.lng),
        popup=f"{row.name}:{row.formatted_address}"
    ).add_to(fm)

或者用apply()方法,代码更简洁:

def add_park_marker(row):
    folium.Marker(
        location=(row['lat'], row['lng']),
        popup=f"{row['name']}:{row['formatted_address']}"
    ).add_to(fm)

df.apply(add_park_marker, axis=1)

4. 数据量过大导致内存崩溃

如果圣地亚哥的公园数量特别多,一次性添加几百上千个Marker会占满内存,导致folium无预警崩溃。这种情况建议用标记聚合插件,既节省内存又让地图加载更快:

from folium.plugins import MarkerCluster

# 先创建聚合层
marker_cluster = MarkerCluster().add_to(fm)

# 把Marker添加到聚合层而非直接添加到地图
for row in df.itertuples():
    folium.Marker(
        location=(row.lat, row.lng),
        popup=f"{row.name}:{row.formatted_address}"
    ).add_to(marker_cluster)

5. 保存文件的路径/名称错误

你代码里的fm.save('parques_%d.htm...')看起来文件名没写完,要确保文件名完整且合法,比如:

fm.save('parques_santiago.html')

最后总结排查步骤

  1. 先清洗数据,处理所有缺失值和异常值
  2. 确认folium地图对象已正确初始化
  3. 替换iterrows()为更稳定的循环方式
  4. 数据量大时用MarkerCluster聚合标记
  5. 检查保存的文件名是否完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:08