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

Python Folium地图仅显示最后一条CSV数据问题排查求助

问题排查与修复

核心问题:缩进错误

Python依赖缩进划分代码块,你的for循环后未对后续代码进行缩进,导致循环体为空——程序只会遍历完所有行,然后在循环结束后仅执行一次标记创建逻辑,自然只会显示最后一行数据的标记。

修复步骤

  1. 修正缩进:将for循环内的变量定义、弹窗创建、条件判断代码全部缩进(通常为4个空格),让它们成为循环体的一部分。
  2. 优化变量读取:循环中直接使用row对象读取字段,比df.at[i, ...]更简洁高效,也能避免索引相关的潜在问题。

修复后的代码示例

import pandas as pd
import folium
from folium.plugins import MarkerCluster, FeatureGroupSubGroup

# 假设m是已创建的地图对象,比如 m = folium.Map(location=[初始纬度, 初始经度], zoom_start=10)
df = pd.read_csv("sur_geo.csv")
su = MarkerCluster(name="Surveyors").add_to(m)

su1 = FeatureGroupSubGroup(su, "Build Manager PAYE")
m.add_child(su1)
su2 = FeatureGroupSubGroup(su, "Supervisor PAYE")
m.add_child(su2)
su3 = FeatureGroupSubGroup(su, "Build Manager - Contractor")
m.add_child(su3)
su4 = FeatureGroupSubGroup(su, "Supervisor - Contractor")
m.add_child(su4)
su5 = FeatureGroupSubGroup(su, "Engineer")
m.add_child(su5)

for i, row in df.iterrows():
    # 修正缩进,直接用row读取字段
    lat = row['lat']
    lng = row['lng']
    nm = row['name']
    sp = row['title']
    sk = row['skillset']

    popup = str(sp)

    if sp == "Build Manager PAYE":
        folium.Marker(
            location=[lat, lng], 
            popup=popup, 
            icon=folium.Icon(color='red', icon='glyphicon-calendar', icon_color='blue')
        ).add_to(su1)
    elif sp == "Supervisor PAYE":
        folium.Marker(
            location=[lat, lng], 
            popup=popup, 
            icon=folium.Icon(color='red', icon='glyphicon-calendar', icon_color='red')
        ).add_to(su2)
    elif sp == "Build Manager - Contractor":
        folium.Marker(
            location=[lat, lng], 
            popup=popup, 
            icon=folium.Icon(color='red', icon='glyphicon-calendar', icon_color='green')
        ).add_to(su3)
    elif sp == "Supervisor - Contractor":
        folium.Marker(
            location=[lat, lng], 
            popup=popup, 
            icon=folium.Icon(color='red', icon='glyphicon-calendar', icon_color='black')
        ).add_to(su4)
    else:
        folium.Marker(
            location=[lat, lng], 
            popup=popup, 
            icon=folium.Icon(color='white', icon='house', prefix='fa', icon_color='green')
        ).add_to(su5)

额外注意事项

  • 确保lat和lng字段是数值类型(而非字符串),如果CSV中是字符串,需要先转换:lat = float(row['lat'])
  • 检查地图对象m是否正确初始化,比如设置了合理的初始坐标和缩放级别,避免标记在视野外导致看不见

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:31:02