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

Python Folium报错ValueError: Location values cannot contain NANs求助

解决folium地图标记的NaN与坐标格式错误

一、彻底清理坐标列的无效值

肉眼看不到空值不代表数据里没有无效值(比如空格、"NA"字符串、非数值格式),按以下步骤处理:

  1. 强制转换坐标列为数值类型,把无效内容转为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'])
    
  2. 验证清理结果,确保没有NaN残留:
    print(df[['latitude', 'longitude']].isnull().sum())
    
    输出应为两个0,说明坐标列已无无效值。

二、确保location参数是合法的(lat, lon)格式

出现“Expected two (lat, lon) values”错误,大概率是坐标传递方式不对,按以下方式修正:

  1. 遍历数据时,明确传递两个浮点数组成的元组/列表:
    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')
    
  2. 如果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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:42