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')
最后总结排查步骤
- 先清洗数据,处理所有缺失值和异常值
- 确认folium地图对象已正确初始化
- 替换
iterrows()为更稳定的循环方式 - 数据量大时用MarkerCluster聚合标记
- 检查保存的文件名是否完整
内容的提问来源于stack exchange,提问作者Sergio Lucero
相关产品推荐
相关产品推荐

