【发布时间】:2016-06-07 10:50:44
【问题描述】:
我对 folium 还是很陌生,在尝试通过循环遍历包含坐标对和每对位置名称的 pandas df 向 folium 地图添加一系列标记时遇到了 AttributeError,例如
location_name location
'foo' [40.736932, -73.997043]
'bar' [40.738859, -73.995058]
'xyz' [40.744085, -74.000394]
使用以下代码:
center_map = [40.738859, -73.995058]
map_1 = folium.Map(location=center_map, tiles=None, zoom_start=12)
for i in df:
folium.Marker(i.location,
popup=i.location_name,
icon=folium.Icon(color='purple')
).add_to(map_1)
但是,我收到以下错误:
AttributeError: 'Series' object has no attribute 'get_name'
我认为是由folium 中的element.py 和generic.py 文件引起的:
/Users/martin/anaconda/envs/py3k/lib/python3.5/site-packages/folium/element.py in add_children(self, child, name, index)
85 def add_children(self, child, name=None, index=None):
86 """Add a child."""
---> 87 return self.add_child(child, name=name, index=index)
88
89 def add_child(self, child, name=None, index=None):
/Users/martin/anaconda/envs/py3k/lib/python3.5/site-packages/folium/element.py in add_child(self, child, name, index)
90 """Add a child."""
91 if name is None:
---> 92 name = child.get_name()
93 if index is None:
94 self._children[name] = child
/Users/martin/anaconda/envs/py3k/lib/python3.5/site-packages/pandas/core/generic.py in __getattr__(self, name)
2667 if name in self._info_axis:
2668 return self[name]
-> 2669 return object.__getattribute__(self, name)
2670
2671 def __setattr__(self, name, value):
AttributeError: 'Series' object has no attribute 'get_name'
感谢有关如何解决此问题的任何帮助!
【问题讨论】:
-
如果您将多行跟踪也添加到问题中,则可能会直接将文件和行暴露在哪里 - 堆栈明智 - 发生异常。我的猜测是,一些神奇的背景方法/函数期望它的客户端对象提供一个 get_name 方法来很好地检索文本,然后它能够在某些地图或工具提示弹出窗口中打印为字符串。
-
为什么
for i in df:并且在下一行中您尝试将完整列添加到Marker。也许您想要for row in df: folium.Marker(row['location'], popup=row['location_name'], ...)之类的东西? -
你说得对,从我这里输入-o - 很抱歉造成混乱!我编辑了代码,但现在得到
TypeError: string indices must be integers