获取两个坐标之间距离时出现错误

3

我有一个 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

我正在尝试寻找接送地点之间的距离。因此,我最初尝试使用此方法基于经纬度计算两点之间的距离通过Haversine公式。当我尝试将度数转换为弧度时,出现了问题。

df_post['lat1'] = radians(df_post['pickup_lat'])

我遇到了这个错误:

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

所以我尝试按照第三条回复中的方法,使用内置函数创建一个纬度和经度的元组,然后使用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.

有人能帮我解释一下为什么会出现这两个错误,以及可能的解决方法吗?

3个回答

4
您的距离计算器的语法为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)

-1
def distancer(row):
    coords_1 = (row['pickup_lat'], row['pickup_long'])
    coords_2 = (row['dropoff_lat'], row['dropoff_long'])
    return geopy.distance.geodesic(coords_1, coords_2).km
df_distance['pickup_dropoff_distance'] = df_distance.apply(distancer, axis=1)

-2

试试这个,应该能用

df_post['lat1'] = radians(df_post['pickup_lat'].astype(float))

2
我在发问题之前就尝试过了,但它没有起作用。 - Raj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接