解决DataFrame中计算两组坐标距离的代码报错问题
坐标距离计算报错的原因及解决方法
问题描述
我的DataFrame包含以下坐标列:Start_Lat: 43.11944、Start_Lng: -75.2932、End_Lat: 43.12029、End_lng: -75.2935,希望新增Distance列存储两组坐标间的公里距离(示例值:0.0984)。我尝试了以下代码:
import geopy.distance as gd coords_1 = data['Start_Lat'].astype(str) +", "+ data["Start_Lng"].astype(str) coords_2 = data['End_Lat'].astype(str) +", "+ data["End_Lng"].astype(str) data['Distance'] = gd(coords_1, coords_2)但运行报错,请问问题出在哪里?
错误原因
- geopy模块调用方式错误:你直接用
gd(coords_1, coords_2)是错误的,geopy.distance是模块而非可直接调用的函数,必须使用模块下的distance()方法,即gd.distance()。 - 坐标格式与批量处理错误:
- 无需将经纬度转为字符串,
gd.distance()接受的是**(纬度, 经度)**格式的数值元组; gd.distance()不支持直接处理整个Series,需要逐行处理每一组坐标对。
- 无需将经纬度转为字符串,
正确实现代码
方法1:apply逐行计算(直观易读)
import geopy.distance as gd def calc_dist(row): coord_start = (row['Start_Lat'], row['Start_Lng']) coord_end = (row['End_Lat'], row['End_Lng']) # .km用于获取公里数,默认返回单位为米 return gd.distance(coord_start, coord_end).km data['Distance'] = data.apply(calc_dist, axis=1)
方法2:矢量化计算(性能更优)
如果DataFrame数据量较大,用np.vectorize实现矢量化运算,效率比apply更高:
import geopy.distance as gd import numpy as np data['Distance'] = np.vectorize( lambda lat1, lng1, lat2, lng2: gd.distance((lat1, lng1), (lat2, lng2)).km )(data['Start_Lat'], data['Start_Lng'], data['End_Lat'], data['End_Lng'])
内容的提问来源于stack exchange,提问作者afroduck
相关产品推荐
相关产品推荐

