2016-08-31 10 views
3

Ich habe eine große Excel-Datei mit Start- und Zielzeiten für Marathonläufer. Um die Anzahl der Läufer zu ermitteln, die sich noch auf dem Kurs befinden, habe ich versucht, die Daten in Pandas zu importieren und den eingebauten Pandas-Vergleich zu verwenden, um eine Liste der Läufer zu einer bestimmten Zeit zurückzugeben. Zu einer bestimmten Zeit x hätten Läufer auf dem Kurs eine Startzeit < = x und eine Endzeit> x. Bei Pandas gibt mir einer davon einen Fehler.Datetime-Vergleich in Pandas mit datetime.time()

Ich habe den Datenrahmen aus Excel importiert mit der read_exel, die automatisch die Startzeiten und Endzeiten als Datetime.time Objekte konvertiert. Hier einige Beispieldaten

df = pd.DataFrame(
{'name':['Bob','Sue','Joe'], 
'start_time':[datetime.time(6,50,0),datetime.t‌​ime(6,55,0),dateti‌​me.time(7,0,0)], 
'start_time':[datetime.time(7,15,04),datetime.time(7,21,41)‌​,datetime.time(7,23,24)],}) 

Läufer beginnen bei 6:50 und ich möchte eine Liste der Menge der Läufer auf der Strecke machen alle 4 Minuten. Also ich habe einige Variablen einrichten, die zu handhaben:

race_start = datetime.datetime(100,1,1,6,50) 
intervaul = datetime.timedelta(minutes = 4) 
capture_time = race_start 

Dann versuche ich, die richtigen Zeilen mit Pandas in Auswahl gebaut wählen

df[df.start_time <= capture_time.time() & df.end_time > capture_time.time()] 

Jedoch habe ich den Fehler:

TypeError: Cannot compare datetime.time and unicode

In der Tat ist df.start_time <= capture_time.time() vollkommen in Ordnung und läuft, aber df.end_time <= capture_time.time() gibt diesen Fehler zurück.

Ich habe keine Ahnung, was hier vor sich geht und jede Hilfe würde geschätzt werden.

Antwort

2

Sie benötigen () zweimal nur hinzufügen, können zunächst weglassen, sondern durch Best Practices verwendet werden, zu:

pd[(pd.start_time <= capture_time.time()) & (pd.end_time <= capture_time.time())] 

Oder vielleicht dtype der Spalte end_time ist nicht datetime, so können Sie verwenden to_datetime:

pd.end_time = pandas.to_datetime(pd.end_time) 

ich denke Name für DataFrame ist besser df, dann können Sie verwenden:

import pandas as pd 

df.end_time = pd.to_datetime(df.end_time) 
+0

Ich werde meinen ursprünglichen Beitrag bearbeiten, um es klarer zu machen. In meiner Eile nannte ich meinen Datenrahmen pd, wenn ich in Wirklichkeit df benutze. Allerdings glaube ich nicht, dass das das Problem ist. Wenn ich 'type (df.end_time [0])' Ich bin datetime.time zurückgegeben. Außerdem bekomme ich den gleichen ursprünglichen Fehler, wenn ich den Code 'df [df.end_time> capture_time.time()] ausfühle.' Ich denke also nicht, dass es ein Gruppierungsproblem ist. –

+0

Können Sie einige Daten hinzufügen? 3 -4 Reihen? – jezrael

+0

Vielleicht können Sie 'df = pd.DataFrame ({'end_time': [datetime.time (10,11,10), datetime.time (11,10,23), datetime.time (12,12,4) ], 'start_time': [datetime.time (10,11,7), datetime.time (11,10,20), datetime.time (12,12)],}) ' – jezrael

Verwandte Themen