OK, sono a metà dell'intelligenza. Sto geocoding un dataframe con geopy. Ho scritto una semplice funzione per prendere un input - nome del paese - e restituire la latitudine e la longitudine. Io uso apply per eseguire la funzione e restituisce un oggetto serie Pandas. Non riesco a convertirlo in un dataframe. Sono sicuro che mi manca qualcosa di ovvio, ma sono nuovo in Python e ancora in RTFMing. A proposito, la funzione geocoder funziona alla grande.Python Panda 'applica' ritorna serie; non posso convertire in dataframe
# Import libraries
import os
import pandas as pd
import numpy as np
from geopy.geocoders import Nominatim
def locate(x):
geolocator = Nominatim()
# print(x) # debug
try:
#Get geocode
location = geolocator.geocode(x, timeout=8, exactly_one=True)
lat = location.latitude
lon = location.longitude
except:
#didn't work for some reason that I really don't care about
lat = np.nan
lon = np.nan
# print(lat,lon) #debug
return lat, lon # Note: also tried return { 'LAT': lat, 'LON': lon }
df_geo_in = df_addr.drop_duplicates(['COUNTRY']).reset_index() #works perfectly
df_geo_in['LAT'], df_geo_in['LON'] = df_geo_in.applymap(locate)
# error: returns more than 2 values - default index + column with results
Ho anche provato
df_geo_in['LAT','LON'] = df_geo_in.applymap(locate)
ottengo un singolo dataframe senza indice e un singolo colume con la serie in esso.
ho provato un certo numero di altri metodi, tra cui 'applyMap':
source_cols = ['LAT','LON']
new_cols = [str(x) for x in source_cols]
df_geo_in = df_addr.drop_duplicates(['COUNTRY']).set_index(['COUNTRY'])
df_geo_in[new_cols] = df_geo_in.applymap(locate)
che restituito un errore dopo un lungo periodo di tempo:
ValueError: Columns must be same length as key
Ho anche provato a convertire manualmente serie su un dataframe utilizzando il metodo df.from_dict(df_geo_in)
senza successo.
L'obiettivo è di geocodificare 166 paesi univoci, quindi collegarli agli indirizzi 188K in df_addr. Sto cercando di essere pandas-y nel mio codice e non scrivere loop se possibile. Ma non ho trovato la magia per convertire serie in dataframes e questa è la prima volta che ho provato a usare apply.
Grazie in anticipo - antica C programmatore
cosa dice type (df_geo_in) in diversi punti? è un dataframe? o una serie? in ogni caso potresti voler df_geo_in.fromdict() ?? df non ha significato se non lo hai definito .. Potresti aver bisogno di pd.DataFrame (df_geo_in) – dartdog