2014-11-20 12 views
9

Ich habe einen Pandas Datenrahmen:Wie stelle ich den Datetimeindex für ein Pandas-Datetime-Objekt in einem Datenrahmen korrekt ein?

lat   lng   alt days    date  time 
0 40.003834 116.321462 211 39745.175405  2008-10-24 04:12:35 
1 40.003783 116.321431 201 39745.175463 2008-10-24  04:12:40 
2 40.003690 116.321429 203 39745.175521  2008-10-24  04:12:45 
3 40.003589 116.321427 194 39745.175579  2008-10-24  04:12:50 
4 40.003522 116.321412 190 39745.175637  2008-10-24  04:12:55 
5 40.003509 116.321484 188 39745.175694  2008-10-24  04:13:00 

für die ich versuche, die df [ 'date'] und df [ 'Zeit'] Spalten in eine Datetime zu konvertieren. Ich kann tun:

df['Datetime'] = pd.to_datetime(df['date']+df['time']) 
df = df.set_index(['Datetime']) 
del df['date'] 
del df['time'] 

Und ich bekomme:

    lat   lng   alt days 
Datetime        
2008-10-2404:12:35 40.003834 116.321462 211 39745.175405  
2008-10-2404:12:40 40.003783 116.321431 201 39745.175463 
2008-10-2404:12:45 40.003690 116.321429 203 39745.175521  
2008-10-2404:12:50 40.003589 116.321427 194 39745.175579  
2008-10-2404:12:55 40.003522 116.321412 190 39745.175637 

Aber dann, wenn ich versuche:

df.between_time(time(1),time(22,59,59))['lng'].std() 

ich einen Fehler - 'Typeerror: Index muss DatetimeIndex'

Also habe ich auch versucht, den DatetimeIndex einzustellen:

df['Datetime'] = pd.to_datetime(df['date']+df['time']) 
#df = df.set_index(['Datetime']) 
df = df.set_index(pd.DatetimeIndex(df['Datetime'])) 
del df['date'] 
del df['time'] 

Und das wirft einen Fehler auch - 'DateParseError: unbekannt String-Format'

Wie erstelle ich die Datetime-Spalte und DatetimeIndex korrekt, so dass df.between_time() rechts funktioniert?

Danke für Ihre Hilfe!

Antwort

16

Um Kirubaharan Antwort ein wenig zu vereinfachen:

df['Datetime'] = pd.to_datetime(df['date'] + ' ' + df['time']) 
df = df.set_index('Datetime') 

Und bekommen Fahrt von unerwünschten Spalten (wie OP tat aber nicht angeben, per se in der Frage):

df = df.drop(['date','time'], axis=1) 
+0

Danke Kracit für die noch vereinfachte Antwort. Dies funktioniert auch großartig und ist, was ich mit der Einfachheit gehen werde. – user3654387

11

Sie sind nicht richtig Datetime-Index erstellen,

format = '%Y-%m-%d %H:%M:%S' 
df['Datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'], format=format) 
df = df.set_index(pd.DatetimeIndex(df['Datetime'])) 
+0

Schön, das funktioniert gut. Ein geschlossenes Zitat in der ersten Zeile fehlt, BTW. – user3654387

Verwandte Themen