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

使用Geopy计算两个DataFrame坐标测地距离出现ValueError如何解决

问题解决方法

报错原因

你遇到的报错和lambda函数无关,是get_distance函数中df2.apply的用法错误:原代码直接把整列df2['lat_lon']传入geodesic方法,此时传入的是长度等于df2行数的序列,而非每行对应的单个坐标元组,触发了Point创建时的参数校验错误。

修正代码

函数修改

from geopy.distance import geodesic

def get_closest_point(point, df2):
    # 创建df2副本,避免修改原始数据,同时排除历史dist列的干扰
    df2_temp = df2.copy()
    # 按行遍历计算距离
    df2_temp['dist'] = df2_temp.apply(lambda row: geodesic(point, row['lat_lon']).miles, axis=1)
    # 返回距离最小的记录
    return df2_temp.loc[df2_temp['dist'].idxmin()]

调用代码(无需修改)

df1['closest_location'] = df1['lat_lon'].apply(lambda x: get_closest_point(x, df2))

可选优化

如果df1和df2的数据量较大,逐行apply的方式效率较低,可以改用KDTree做批量最近邻查询,运算速度会有数量级提升。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:39:02