You need to enable JavaScript to run this app. 基于pandas DataFrame位置数据生成Folium地图标记的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

基于pandas DataFrame位置数据生成Folium地图标记的问题求助

从DataFrame批量导入点位到已初始化Folium地图的实现方案

基础可运行实现(适合小数据量,新手友好)

首先确认你的商家DataFrame字段结构,可根据实际列名调整:

你的数据需至少包含独立的纬度、经度列,可选添加商家名称、类别等自定义展示字段,示例结构参考:

# 示例DataFrame,替换为你实际的字段名即可
df = pd.DataFrame({
    "shop_name": ["老李家面馆", "甜心烘焙", "惠民超市"],
    "lat": [31.2304, 31.2351, 31.2276], # 纬度列
    "lon": [121.4737, 121.4829, 121.4653], # 经度列
    "shop_type": ["餐饮", "烘焙", "零售"]
})

核心遍历添加标记代码(假设你已初始化的地图变量为m):

# 逐行读取DataFrame内容添加标记
for _, row in df.iterrows():
    folium.Marker(
        # 注意location参数顺序为 纬度在前、经度在后,切勿写反
        location=[row["lat"], row["lon"]],
        # 点击标记弹出的详情内容,可自定义展示字段
        popup=f"商家名:{row['shop_name']}<br>类别:{row['shop_type']}",
        # 鼠标悬停时显示的快速提示
        tooltip=row["shop_name"]
    ).add_to(m)

# Jupyter中直接运行下方语句即可渲染最终地图
m

大数据量优化方案(数据量≥100条时推荐)

逐行渲染标记会拖慢Jupyter页面加载速度,可使用Folium内置的快速标记聚合组件批量导入数据:

from folium.plugins import FastMarkerCluster

# 直接传入经纬度二维数组,自动生成批量标记
FastMarkerCluster(data=df[["lat", "lon"]].values.tolist()).add_to(m)

# 如果需要保留自定义弹出提示,可通过回调函数配置:
# FastMarkerCluster(
#     data=df[["lat", "lon", "shop_name"]].values.tolist(),
#     callback="""
#         function(rows) {
#             return L.marker(new L.LatLng(rows[0], rows[1]))
#             .bindPopup(`商家名称:${rows[2]}`);
#         };
#     """
# ).add_to(m)

常见问题排查

  • 所有点位显示在错误位置:优先检查经纬度列是否写反顺序,Folium要求location参数格式为[纬度, 经度],切勿颠倒
  • 代码运行报错:检查经纬度列数据类型,若为字符串格式需先转换为浮点型,执行df["lat"] = df["lat"].astype(float)、df["lon"] = df["lon"].astype(float)即可解决
  • Jupyter中地图不显示:确认未被其他单元格的同名地图变量覆盖,最后单独输出一行m即可触发渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 11:54:05