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

如何统计重复街道地址并正确使用Folium绘制结果?

问题分析与解决方案

咱们来拆解你遇到的两个folium使用问题:

1. folium.Marker(m) 报错的原因

folium.Marker 是用来创建单个点位标记的,它需要接收的是单个点的经纬度(比如 location=[37.09024, -95.712891] 这种格式),但你直接把包含所有点位的列表 m 传进去,它根本不知道该怎么处理一堆坐标,自然会报错。要批量加标记的话,得循环遍历每个点位来创建Marker。

2. HeatMap(m).add_to(m) 报错的原因

这里有两个核心问题:

  • 变量名冲突:你把数据列表命名成了 m,但 add_to() 方法需要传入的是folium的Map对象,不是你的数据列表。
  • 逻辑错误:HeatMap本身没问题(你的数据格式 [[lat, lon, count], ...] 是符合要求的),但你把数据列表传给了add_to(),相当于让HeatMap添加到一堆数据里,这完全不符合folium的逻辑。

修正后的完整代码示例

先补全你漏掉的「创建基础地图」步骤,再分别处理HeatMap和Marker:

import pandas as pd
import folium
from folium.plugins import HeatMap

# 你之前的预处理代码
df = pd.read_csv('C:\\Users\\ryans\\OneDrive\\Desktop\\lat_lon.csv')
df['Count'] = df.groupby('Street')['Street'].transform('count')

# 整理绘图数据,换个变量名避免冲突
point_data = df[['latitude', 'longitude', 'Count']].groupby(['latitude', 'longitude']).sum().reset_index().values.tolist()

# 第一步:创建基础地图对象(这是你之前缺失的关键步骤)
# 用数据的平均经纬度作为地图初始中心,适配你的数据范围
center_lat = df['latitude'].mean()
center_lon = df['longitude'].mean()
my_map = folium.Map(location=[center_lat, center_lon], zoom_start=10)

# 第二步:添加热力图,把HeatMap添加到地图对象my_map里
HeatMap(point_data).add_to(my_map)

# 第三步:批量添加标记,循环遍历每个点位创建Marker
for lat, lon, count in point_data:
    folium.Marker(
        location=[lat, lon],
        popup=f"该坐标下地址数量: {int(count)}",  # 点击标记显示计数
        tooltip="点击查看详情"  # 鼠标悬停提示
    ).add_to(my_map)

# 在Jupyter Notebook里直接显示地图
my_map
# 或者保存为HTML文件
# my_map.save('street_count_map.html')

关键注意点

  • 所有folium图层(Marker、HeatMap等)都必须添加到folium.Map对象上,这是folium的核心逻辑,不能跳过创建地图的步骤。
  • 批量创建Marker一定要循环遍历数据,因为Marker是单个点位的组件。
  • 变量名尽量区分开(比如数据用point_data,地图用my_map),避免因重名导致的逻辑混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:37:50