Ошибка при получении расстояния между двумя координатами - PullRequest
0 голосов
/ 18 мая 2018

У меня есть 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используя встроенную функцию и для этого создал кортеж lat и long.

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.

Может кто-нибудь помочь мне с тем, почему либоошибки происходят и каково возможное решение.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Синтаксис для вашего калькулятора расстояний: geopy.distance.VincentyDistance(coords_1, coords_2).miles, где coords_1 и coords_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)
0 голосов
/ 18 мая 2018

Попробуйте это должно работать

df_post['lat1'] = radians(df_post['pickup_lat'].astype(float))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...