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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:45:38