如何计算pandas DataFrame中两站点经纬度距离并解决相关报错
问题原因
- 你使用了Python标准库
math中的三角函数,这类函数仅支持单个浮点数值输入,无法直接处理pandasSeries类型的列数据,因此触发类型转换错误 - 代码中
lat1、lat2、R三个变量未定义:lat1对应你的start_lat列,lat2对应end_lat列,R为地球半径,取6371时结果单位为公里,取3956时结果单位为英里 - 经纬度为角度单位,三角函数运算需要先转换为弧度,否则计算出的距离结果会完全错误
解决方案:矢量化计算(效率最高,无需循环)
使用支持矢量运算的numpy库替代math库的函数即可,完整代码如下:
import numpy as np import pandas as pd # 地球半径,按需切换单位:6371=公里,3956=英里 R = 6371 # 经纬度转弧度 lat1 = np.radians(data['start_lat']) lon1 = np.radians(data['start_lng']) lat2 = np.radians(data['end_lat']) lon2 = np.radians(data['end_lng']) # 计算经纬度差值 dlon = lon2 - lon1 dlat = lat2 - lat1 # 哈弗辛公式计算球面距离 a = np.sin(dlat / 2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2)**2 c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)) # 结果写入新列 data['distance'] = R * c
内容的提问来源于stack exchange,提问作者K C
相关产品推荐
相关产品推荐

