【问题标题】:Error while getting the distance between two co-ordinates获取两个坐标之间的距离时出错
【发布时间】:2018-10-28 08:33:43
【问题描述】:

我有一个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公式使用Getting distance between two points based on latitude/longitude这里的方法。当我尝试使用

将度数转换为弧度时
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.

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

【问题讨论】:

    标签: python pandas dataframe distance haversine


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个应该可以的

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

      【讨论】:

      • 是的,我在发布问题之前就这样做了,它没有用
      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2018-06-12
      相关资源
      最近更新 更多