使用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
相关产品推荐
相关产品推荐

