Python Folium报错ValueError: Location values cannot contain NANs求助
解决folium地图标记的NaN与坐标格式错误
一、彻底清理坐标列的无效值
肉眼看不到空值不代表数据里没有无效值(比如空格、"NA"字符串、非数值格式),按以下步骤处理:
- 强制转换坐标列为数值类型,把无效内容转为NaN:
import pandas as pd df = pd.read_csv('surveyed.csv') # 把无法转成数值的内容强制转为NaN df['latitude'] = pd.to_numeric(df['latitude'], errors='coerce') df['longitude'] = pd.to_numeric(df['longitude'], errors='coerce') # 只删除坐标列含NaN的行 df = df.dropna(subset=['latitude', 'longitude']) - 验证清理结果,确保没有NaN残留:
输出应为两个0,说明坐标列已无无效值。print(df[['latitude', 'longitude']].isnull().sum())
二、确保location参数是合法的(lat, lon)格式
出现“Expected two (lat, lon) values”错误,大概率是坐标传递方式不对,按以下方式修正:
- 遍历数据时,明确传递两个浮点数组成的元组/列表:
import folium # 以所有坐标的平均值作为地图初始中心 m = folium.Map(location=[df['latitude'].mean(), df['longitude'].mean()], zoom_start=12) for _, row in df.iterrows(): folium.Marker( location=(row['latitude'], row['longitude']), # 明确lat在前,lon在后 popup=str(row.get('name', '')) # 替换成你需要的弹窗内容 ).add_to(m) m.save('survey_map.html') - 如果CSV里坐标是合并在同一列(比如
"39.9,116.3"格式),先拆分再转换:# 假设坐标列名为'coords' df[['latitude', 'longitude']] = df['coords'].str.split(',', expand=True).astype(float) df = df.dropna(subset=['latitude', 'longitude'])
三、额外排查点
- 坐标列不能是字符串类型,必须转为浮点数后再传给folium
- 若坐标值有前后空格,先清理:
df['latitude'] = df['latitude'].str.strip() - 过滤超出合理范围的坐标(纬度-9090,经度-180180):
df = df[(df['latitude'].between(-90, 90)) & (df['longitude'].between(-180, 180))]
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

