Расчет расстояния широты / долготы на кадре данных pandas с использованием GeoPy - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь рассчитать расстояние между широтой и долготой, используя геопию на Pandas фрейме данных.

вот мой фрейм данных:

    latitude    longitude   altitude
    -15.836310  -48.020298  1137.199951
    -15.836360  -48.020512  1136.400024
    -15.836415  -48.020582  1136.400024
    -15.836439  -48.020610  1136.400024
    -15.836488  -48.020628  1136.599976

Я пробовал два разных способа:

from geopy import distance

for i in range(1, len(df)):
   before = (df.loc[i-1, 'latitude'], df.loc[i-1, 'longitude'])
   actual = (df.loc[i, 'latitude'], df.loc[i, 'longitude'])
   df.loc[i, 'geodesic'] = distance.distance(before, actual).miles

ошибка:

 KeyError: 0

По-видимому, df.loc[i, 'column_name'] не работает.

и:

from geopy import distance

df['geodesic'] = distance.distance((df.latitude.shift(1), df.longitude.shift(1)), (df.latitude, df.longitude)).miles

Ошибка:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Официальная документация GeoPy:

from geopy import distance
newport_ri = (41.49008, -71.312796)
cleveland_oh = (41.499498, -81.695391)
print(distance.distance(newport_ri, cleveland_oh).miles)

Ответы [ 2 ]

1 голос
/ 05 августа 2020
raw = """latitude;longitude;altitude
-15.836310;-48.020298;1137.199951
-15.836360;-48.020512;1136.400024
-15.836415;-48.020582;1136.400024
-15.836439;-48.020610;1136.400024
-15.836488;-48.020628;1136.599976"""

import pandas as pd
from io import StringIO
from geopy import distance

data = StringIO(raw)
df = pd.read_csv(data, sep=";")
df1 = df.drop(['altitude'], axis=1)
locations = df1.apply(tuple, axis=1)

for counter in range(len(locations) - 1):
    print(distance.distance(locations[counter], locations[counter + 1]).miles)

из df = pd.read_csv(data, sep=";") это то же самое, что и ваш код, я сделал его тестируемым.

После этого df1 = df.drop(['altitude'], axis=1) отбросьте ось z таблицы, которая не нужна в этом приложении.

преобразовать df1 в кортежи и l oop через местоположения, и вы получите свое расстояние

1 голос
/ 05 августа 2020

Я получил ошибку.

1 - Мне нужно было проверить, соответствует ли latitude или longitude NaN.

2 - Я не мог установить time как индекс. (я не знаю почему, это заняло много времени, чтобы обнаружить)

После проверки ошибка исчезла.

...