python - 获取两个坐标之间的距离时出错

标签 python pandas dataframe distance haversine

我有一个 panda dataframe 具有以下 schema:

customer_id                                     int64
vehicle_type                                   object
pickup_place                                   object
place_category                                 object
how_long_it_took_to_order                      object
pickup_lat                                    float64
pickup_lon                                    float64
dropoff_lat                                   float64
dropoff_lon                                   float64
pickup_coord                                   object
dropoff_coord                                  object
dtype: object

我正在尝试找出上车地点和下车地点之间的距离。所以我最初尝试使用此处的方法 Getting distance between two points based on latitude/longitude通过 haversine 公式。当我尝试使用

将度数转换为弧度时
df_post['lat1'] = radians(df_post['pickup_lat'])

我遇到了这个错误:

TypeError: cannot convert the series to <class 'float'>

所以我尝试按照第 3 个回复中的方法,使用内置函数的 geopy.distance 模块,并为此创建了一个经纬度元组。

df_post['pickup_coord']=list(zip(df_post['pickup_lat'],df_post['pickup_lon']))
df_post['dropoff_coord']=list(zip(df_post['dropoff_lat'],df_post['dropoff_lon'])

但是当我尝试内置函数时

df_post['pickup_dropoff_distance']=gd.VincentyDistance(df_post['pickup_coord'],df_post['dropoff_coord']).miles

我收到一个新错误:

ValueError: When creating a Point from sequence, it must not have more than 3 items.

谁能帮我解释为什么会出现这两个错误,以及可能的解决方案是什么。

最佳答案

距离计算器的语法是 geopy.distance.VincentyDistance(coords_1, coords_2).miles,其中 coords_1coords_2 是元组.

要将该函数应用于数据框中的每一行,您需要使用 pd.DataFrame.apply :

def distancer(row):
    coords_1 = (row['pickup_lat'], row['pickup_long'])
    coords_2 = (row['dropoff_lat'], row['dropoff_long'])
    return geopy.distance.VincentyDistance(coords_1, coords_2).miles

df_post['pickup_dropoff_distance'] = df_post.apply(distancer, axis=1)

关于python - 获取两个坐标之间的距离时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402199/

相关文章:

python - 我在 python 上写了一个货币转换器,它说 'money' 没有定义。这发生在最后的乘法中

python - if 语句迭代标记化文本并删除不需要的项目

python - Pandas 数据框分组并检索日期范围

python - 数据框的原始值没有变化

python - Pandas groupby 值并获取最大日期和最小日期的值

python - 转换python正则表达式

python - 在两个 csv 文件中查找匹配项

python - 将 MySQL 结果插入现有的 pandas 数据帧

python - Pandas :具有多个条件的交叉连接

python - 将标识符行添加到数据框,然后写入 excel 文件