Pandas .apply función y asignar valor indexado del retorno de la función.
Tengo un pandas DataFrame con algunas direcciones que estoy tratando de geocodificar. La función de geocodificación devuelve una lista de Lat, Long. Me gustaría asignar la Lat
y Long
a columnas separadas en el Pandas DataFrame.
Aquí está el código.
import geocoder
token = MAPBOX_KEY
def obtener_geocodigos(direccion):
g = geocoder.mapbox(direccion, key=token)
geojson = g.json
direccion = geojson["address"]
coordenadas = [geojson['lat'], geojson['lng']]
Lat = coordenadas[0]
Long = coordenadas[1]
return (Lat, Long)
# DataFrame
df = pd.DataFrame({'ID': [1,2,3],
'Addr': ['320 E Willeta Phoenix AZ 85004',
'6811 East Main Street Scottsdale AZ 85251',
'20446-20456 Saticoy Street Los Angeles CA 91306'],
'Lat': [1,1,1],
'Long': [1,1,1]
})
# Aplicar latitud y longitud al Pandas DataFrame
df['Lat'] = df.apply(lambda x : obtener_geocodigos(x['Addr']), axis=1)
df['Long'] = df.apply(lambda x : obtener_geocodigos(x['Addr']), axis=1)
¿Cómo puedo acceder a los valores de la lista y asignarlos a las columnas Lat y Long del Pandas DataFrame? Preferiría no modificar la función ya que se utiliza en varios lugares.
davy.ai
Para acceder a los valores de la lista devuelta por la función de geocodificación
get_geocodes()
y asignarlos a las columnasLat
yLong
en el Pandas DataFrame por separado, podemos utilizar el método.apply()
y una función lambda para desempaquetar la tupla devuelta.Aquí está el código modificado:
Utilizando el método
.apply()
en la columnadf['Addr']
con la función lambdalambda x: pd.Series(get_geocodes(x))
se aplica la funciónget_geocodes()
a cada elemento de la columnadf['Addr']
y se devuelve una tupla. La funciónpd.Series()
luego desempaqueta la tupla y asigna los valores devueltos a las columnasLat
yLong
respectivamente. Usando dobles corchetes[['Lat', 'Long']]
se asignan los valores a ambas columnas a la vez.