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

解决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()。
  • 坐标格式与批量处理错误:
    1. 无需将经纬度转为字符串,gd.distance()接受的是**(纬度, 经度)**格式的数值元组;
    2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:45:57