使用Pandas和Folium在地图上绘制标记

11

我想使用Folium绘制大量(约20,000)的圆形标记。纬度和经度数据包含在Pandas DataFrame中(在“LAT”和“LONG”列中)。我已经编写了以下(低效的)代码,需要逐行迭代DataFrame。毫不奇怪地,绘制地图需要相当长的时间。有没有更好/更快的方法来完成这个任务?

同时,我并不一定非要使用Folium。如果您知道更合适的工具(但我仍然必须将数据存储在Pandas DataFrame中),请告诉我。

谢谢!

map_osm = folium.Map(location=[43.094768, -75.348634])
for index, row in df.iterrows():
    folium.CircleMarker(location=[row["LAT"], row["LONG"]]).add_to(map_osm)
map_osm
2个回答

13

沿列轴使用apply:

df.apply(lambda row:folium.CircleMarker(location=[row["LAT"], 
                                                  row["LONG"]]).add_to(map_osm),
         axis=1)

我尝试了一下,但似乎并没有加速处理过程。使用%%timeit魔法命令,我测试了前5条记录,结果我的代码和你的代码都在200毫秒左右。 - marillion
你能否一次性将一个圆列表添加到地图上,还是必须逐个添加圆? - Zeugma
1
看起来Folium不支持向量化数据输入。至少,我找到的所有示例都需要逐行迭代。看来我可能需要找另一个解决方案。 - marillion

1

使用这个例子,希望能够帮到你!

#Create the Map
map_osm = folium.Map(
    location = [43.094768, -75.348634],
    zoom_start = 6
)
map_osm

#You Markler the point in Map
for indice, row in df.iterrows():
    folium.Marker(
        location=[row["LAT"], row["LONG"]],
        popup=row['NAME_COLUM'],
        icon=folium.map.Icon(color='yellow')
    ).add_to(map_osm)
map_osm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接