2017-06-12 4 views
2
from timezonefinder import TimezoneFinder 
import pandas as pd 

tf = TimezoneFinder() 
df = pd.DataFrame({'latitude': [-22.540556,-22.950556,-22.967778], 'longitude': [-43.149167,-43.230833,-43.234444], 'timezone': [0,0,0]}) 
TimeZone = tf.timezone_at(lng=df['longitude'], lat=df['latitude']) 
df['timezone'].apply(TimeZone) 

print(df) 

Hallo, neu zu Python und kämpfen, um TimeZoneFinder für mich arbeiten zu lassen. Ich möchte timezone_at() auf die TimeZone-Spalte basierend auf Geolocations aus 2 anderen Spalten anwenden. Irgendwelche Tipps, wie das funktioniert?Anwenden der TimeZoneFinder-Funktion auf einem Pandas DataFrame

Fehler:

Traceback (most recent call last): 
    File "C:/Users/mhembree/PycharmProjects/Python/Test Column Add.py", line 17, in <module> 
    TimeZone = tf.timezone_at(lng=df['longitude'], lat=df['latitude']) 
    File "C:\Program Files (x86)\Python 3.5\lib\site-packages\timezonefinder\functional.py", line 27, in wrapper 
    return func(*args, **kwargs) 
    File "C:\Program Files (x86)\Python 3.5\lib\site-packages\timezonefinder\timezonefinder.py", line 483, in timezone_at 
    if lng > 180.0 or lng < -180.0 or lat > 90.0 or lat < -90.0: 
    File "C:\Program Files (x86)\Python 3.5\lib\site-packages\pandas\core\generic.py", line 955, in __nonzero__ 
    .format(self.__class__.__name__)) 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 
+0

Ihre geografische Breite und Länge sind Arrays keine Einzelwerte. Es scheint, dass Sie drei separate Koordinaten in Ihren Daten haben. Warum? –

+1

Danke für die Antwort, der Anwendungsfall ist, dass ich eine Tabelle von Standorten mit lat und lang habe. Ich möchte die Zeitzone Spalte mit einer Funktion füllen. Breitengrad Längengrad Zeitzone -22.540556 -43.149167 0-15.230833 0 -22.967778 -43.234444 0 Ich weiß, dass das, was ich wahrscheinlich an die Funktion übergebe, eine Kette von Koordinaten ist, die als 1 Wert betrachtet wird und meinen Fehler verursacht. Muss ich eine Schleife verwenden und durch jede Zeile iterieren oder ist es möglich, apply() zu verwenden? – user4462287

+0

Bearbeitet Ihre Frage um Pandas und Dataframe zu taggen. Ich bin kein Experte in diesem Bereich, also werde ich jemand anderen diese Frage beantworten lassen, oder Sie können es selbst beantworten, wenn Sie es herausfinden. [Dieses Tutorial] (https://chrisalbon.com/python/pandas_apply_operations_to_dataframes.html) scheint anzuzeigen, dass Sie die Funktion nicht mit der richtigen Syntax definieren. –

Antwort

3

Sie waren eigentlich ganz nah! Meine bevorzugte Methode, Spalten als Eingabe für die Zufallsfunktion zu verwenden und sie in einer neuen Spalte zu speichern, ist die am besten bewertete in .

from timezonefinder import TimezoneFinder 
import pandas as pd 

my_func = TimezoneFinder().timezone_at #Note the no parenthesis on the function call! 
df = pd.DataFrame({'latitude': [-22.540556,-22.950556,-22.967778], 'longitude': [-43.149167,-43.230833,-43.234444], 'timezone': [0,0,0]}) 
df['timezone'] = df.apply(lambda x: my_func(lng=x['longitude'], lat=x['latitude']),axis=1) 

, dass das Ergebnis erzeugen würde, die Sie nach: Nach ihr könnte Ihr Problem wie dieses Problem gelöst werden

latitude longitude   timezone 
0 -22.540556 -43.149167 America/Sao_Paulo 
1 -22.950556 -43.230833 America/Sao_Paulo 
2 -22.967778 -43.234444 America/Sao_Paulo 
+0

Funktioniert! Vielen Dank! – user4462287

Verwandte Themen