使用folium绘制巴黎Airbnb位置时触发随机KeyError的原因排查
问题原因及解决办法
为什么会出现随机KeyError?
你用range(0, len(df4)-1)生成连续整数来取数,但你的df4大概率是经过筛选、删除行等操作后,索引已经不是连续的整数序列了。比如之前删过第6、10行,循环到这些数字时,DataFrame里根本没有对应索引的行,自然抛出KeyError。
两种解决方法
方法1:直接遍历DataFrame的行(推荐)
不用手动生成索引数字,直接遍历每行数据,不管索引是否连续都能正常取到经纬度:
f = folium.Figure(width = 800, height = 500) map = folium.Map(location = [48.8569421129686, 2.3503337285332204], zoom_start = 10, tiles = 'CartoDB positron').add_to(f) # 直接遍历每行 for idx, row in df4.iterrows(): lat = row['latitude'] long = row['longitude'] # 注意:folium.Marker的图标参数是icon,不是marker_icon folium.Marker([lat, long], icon=folium.Icon(icon='cloud')).add_to(map) map
方法2:重置DataFrame索引
如果非要用原来的循环方式,可以先把df4的索引重置为连续整数:
# 重置索引,drop=True丢弃原来的旧索引 df4 = df4.reset_index(drop=True) # 之后再运行循环代码 f = folium.Figure(width = 800, height = 500) map = folium.Map(location = [48.8569421129686, 2.3503337285332204], zoom_start = 10, tiles = 'CartoDB positron').add_to(f) for index in range(0, len(df4)): # 无需减1,range左闭右开特性刚好覆盖所有行 lat = df4['latitude'][index] long = df4['longitude'][index] folium.Marker([lat, long], icon=folium.Icon(icon='cloud')).add_to(map) map
额外提示
你原来代码里的marker_icon='cloud'参数是错误的,folium.Marker需要用icon=folium.Icon(icon='cloud')来指定图标,否则图标不会生效。
内容的提问来源于stack exchange,提问作者shrey_shankar
相关产品推荐
相关产品推荐

