Cómo calcular la distancia entre latitudes y longitudes de dos estaciones en un dataframe de pandas.
Tengo un dataframe con información de estaciones que incluye latitudes y longitudes de la siguiente manera:
start_lat start_lng end_lat end_lng
41.877726 -87.654787 41.888716 -87.644448
41.930000 -87.700000 41.910000 -87.700000
41.910000 -87.690000 41.930000 -87.700000
y similares.
Quiero crear una columna de distancia a partir de esta información, donde la distancia puede estar en km o en millas para la distancia entre estos puntos de inicio y fin.
(Como se comparte en el kin a continuación, cuando intento implementar la respuesta SO, encuentro un error.)
from math import sin, cos, sqrt, atan2
dlon = data.end_lng – data.start_lng
dlat = data.end_lat – data.start_lat
a = ((sin(dlat/2))2 + cos(lat1) * cos(lat2) * (sin(dlon/2))2)
c = 2 * atan2(sqrt(a), sqrt(1-a))
data[‘distance’] = R * c
TypeError Traceback (most recent call last)
2 dlon = data.end_lng – data.start_lng
3 dlat = data.end_lat – data.start_lat
—-> 4 a = ((sin(dlat/2))2 + cos(lat1) * cos(lat2) * (sin(dlon/2))2).apply(lambda x: float(x))
5 c = 2 * atan2(sqrt(a), sqrt(1-a))
6 data[‘distance’] = R * c
/usr/local/lib/python3.7/dist-packages/pandas/core/series.py in wrapper(self)
127 if len(self) == 1:
128 return converter(self.iloc[0])
—> 129 raise TypeError(f”cannot convert the series to {converter}”)
130
131 wrapper.name = f”{converter.__name}__”
TypeError: no se puede convertir la serie a
¿Cómo se puede resolver esto?
davy.ai
Para calcular la distancia entre dos puntos dadas sus coordenadas de latitud y longitud, se puede usar la fórmula de Haversine.
Aquí hay un ejemplo de código que utiliza esta fórmula y pandas para calcular la distancia en kilómetros:
Esto debería producir:
Si desea calcular la distancia en millas, puede cambiar el radio de la Tierra a millas (3961) y modificar la función en consecuencia.