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

Python中基于条件的Nominatim地理定位器执行报错求助

Python中基于条件的Nominatim地理定位器执行报错求助

嗨,我来帮你排查这个问题~你遇到的ValueError本质是因为函数返回值不符合pandas的预期,咱们一步步拆解问题:

错误原因分析

你的find_location函数存在两个关键问题:

  1. 当邮编(place_data)也无法被Nominatim解析时,location_overall会变成None,此时返回的不是两个数值,pandas没法把它拆分成Lat和Lng两列;
  2. 就算location_overall解析成功,你直接返回的是Location对象,而不是它的latitude和longitude属性,同样会导致pandas无法提取数值。

修正后的代码

import pandas as pd
import folium
import webbrowser  # 修正了你拼写错误的web-browser
from geopy.geocoders import Nominatim

geolocator = Nominatim(timeout=10, user_agent="Krukarius")

def find_location(row):
    place = row['Address']
    # 截取地址后8位作为邮编(如果格式有变化,这里需要调整逻辑)
    place_data = place[-8:]
    
    # 优先解析完整地址
    location = geolocator.geocode(place)
    if location is not None:
        return location.latitude, location.longitude
    
    # 完整地址失败,尝试解析邮编
    location_overall = geolocator.geocode(place_data)
    if location_overall is not None:
        return location_overall.latitude, location_overall.longitude
    
    # 两种解析都失败时,返回默认数值(也可以用pd.NA表示缺失值)
    return 0.0, 0.0

points = pd.read_csv("Addresses4.csv")
points[['Lat','Lng']] = points.apply(find_location, axis="columns", result_type="expand")
print(points)
points.to_csv('NewAddresses4.csv')

关键修改说明

  • 修正了webbrowser的拼写错误,避免导入失败;
  • 给每个分支都明确返回两个数值类型的结果,确保pandas能正常拆分生成Lat和Lng列;
  • 增加了对location_overall的非空判断,避免返回None导致报错;
  • 如果两种解析都失败,你可以选择返回0.0,0.0,也可以换成pd.NA,pd.NA,更贴合pandas的缺失值处理逻辑。

另外小提醒:如果你的地址格式不是固定后8位为邮编,建议调整place_data的截取逻辑(比如用字符串分割提取邮编),避免传入无效内容导致解析失败。

备注:内容来源于stack exchange,提问作者Geographos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:32:27