我正在尝试使用folium从 Jupyter Notebook 中的 .csv 文件中映射一堆点。在我的数据框中,我有两列名为“纬度”和“经度”,它们将坐标信息保存为浮点数。
这是我正在使用的代码:**编辑以包含数据帧代码
import folium
from folium.plugins import FastMarkerCluster
%matplotlib inline
import pandas as pd
import re
import os
import branca.colormap as cm
import re
import numpy as np
df = pd.read_csv('D:/documents/professional/school/hunter/data/Retail_Food_Stores.csv')
print(folium.__version__)
导入 .csv 和模块
def createLatLong(location):
try:
return re.findall(r'\((.*?)\)', location)
except:
return None
def createLatLongColsX(item):
for items in df_nyc['Lat_Long']:
for item in items:
try:
return re.split(',', item)[0]
except:
return None
def createLatLongColsY(item):
for items in df_nyc['Lat_Long']:
for item in items:
try:
return re.split(',', item)[1]
except:
return None
df_nyc['Latitude'] = df_nyc['Location'].apply(createLatLongColsX)
df_nyc['Longitude'] = df_nyc['Location'].apply(createLatLongColsY)
df_nyc['Latitude'] = df_nyc['Latitude'].astype(float).fillna(0.0)
df_nyc['Longitude'] = df_nyc['Longitude'].astype(float).fillna(0.0)
创建包含点值的列
this_map = folium.Map(prefer_canvas=True)
def plotDot(point):
try:
folium.CircleMarker(location=[point.Latitude, point.Longitude],
radius=2,
weight=10,#remove outline
popup = point['Entity Name'],
fill_color='#000000').add_to(this_map)
except:
break
df.apply(plotDot, axis = 1, raw=True)
this_map.fit_bounds(this_map.get_bounds())
this_map
创建地图并应用于数据框行
幸运的是,地图确实显示得有些正确,因为它出现在笔记本中。但是,无论我如何切片数据帧,出现的点总是相同的。有趣的是,单击该点时弹出窗口中显示的名称始终是我的数据框切片部分中的最后一个项目名称。
因此,它似乎正确地提取了名称,但没有正确填充标记位置。在笔记本中使用 Python 2.7。
编辑 2 - Est_Type_Long Latitude Longitude
0 [多重操作,商店,食品制造商] 40.676932 -73.969136
1 [多重操作,商店,食品制造商] 40.676932 -73.969136
2 [多重操作,商店,食品制造商] 40.676932 -73.969136
3 [多重操作, Store, Bakery, Food Manu... 40.676932 -73.969136
4 [多重操作, Store, Food Manufacturer] 40.676932 -73.969136