Streamlit地图应用出现KeyError: 'latitude'错误求助
解决Streamlit地图应用的KeyError: 'latitude'问题
可能的问题原因及对应解决方法:
列名匹配问题
确认CSV文件中的latitude、longitude列名和代码中完全一致,注意大小写、前后空格(比如不要是Latitude或latitude这类带格式差异的列名)。可以在读取CSV后先打印列名排查:def display_map(file): data = pd.read_csv(file) print(data.columns.tolist()) # 输出所有列名,核对是否存在目标列 # 后续代码...代码拼写错误
代码里的data.itterrows()是拼写错误,正确写法是data.iterrows(),这个错误会导致循环逻辑无法正常执行,需优先修正。CSV分隔符不匹配
如果你的CSV文件使用分号或其他符号作为分隔符,读取时需要指定sep参数:data = pd.read_csv(file, sep=';') # 根据实际分隔符调整列名含隐藏空格
可以统一清理列名前后的空格,避免因列名带空格导致的KeyError:data = pd.read_csv(file) data.columns = data.columns.str.strip() # 去除所有列名的前后空格弹窗列名的空格问题
代码中row['APPLICATION ']末尾带空格,需确认CSV中对应列名是否一致,或者改用row.get()避免报错:popup_text = row.get('APPLICATION', '无属性信息') # 找不到列时返回默认值
修正后的完整代码:
import folium from folium import Map import pandas as pd import streamlit as st def display_map(file): data = pd.read_csv(file) # 清理列名前后空格 data.columns = data.columns.str.strip() # 提前校验必要列是否存在 if 'latitude' not in data.columns or 'longitude' not in data.columns: st.error("CSV文件缺少latitude或longitude列,请检查文件") return m = Map(location=[data['latitude'].mean(), data['longitude'].mean()], zoom_start=13) # 修正iterrows拼写错误 for i, row in data.iterrows(): # 安全获取弹窗内容 popup_text = row.get('APPLICATION', '无属性信息') folium.Marker( location=[row['latitude'], row['longitude']], popup=popup_text, icon=folium.Icon(color='red') ).add_to(m) st.write(m) def main(): file = st.file_uploader("Upload a CSV File", type=["csv"]) if file is not None: display_map(file) if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Sphelele Ntilane
相关产品推荐
相关产品推荐

