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

如何计算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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:05