2017-08-29 2 views
3

Ich habe einen Pandas Datenrahmen mit einem DateTimeIndex:Pandas: Zugriff auf Daten mit einer Liste von Daten und DateTimeIndex

      A   B 
2016-04-25 18:50:06 440.967796 201.049600 
2016-04-25 18:50:13 441.054995 200.767034 
2016-04-25 18:50:20 441.142337 200.484475 
... 
2016-07-27 18:50:06 440.967796 201.049600 
2016-07-27 18:50:13 441.054995 200.767034 
2016-07-27 18:50:20 441.142337 200.484475 

Ich möchte alle Daten zu einem bestimmten Zeitpunkt yyyy-mm-dd mit einer Liste von Daten extrahieren: ['2016-04-25','2016-04-28',...]

ich habe versucht, die folgenden:

df[df.index.isin(['2016-04-25', '2016-04-26'])] 

Empty DataFrame 

ich möchte alle Daten abgerufen werden (Daten des ganzen Tages) der Termine gi uch in dieser Liste

Antwort

3

Sie müssen mal entfernen zuerst von this solutions:

df = df[df.index.normalize().isin(['2016-04-25', '2016-04-26'])] 

df = df[df.index.floor('D').isin(['2016-04-25', '2016-04-26'])] 

Eine andere Lösung ist DatetimeIndex.date vergleichen, aber notwendig Verwendung numpy.in1d statt isin:

df = df[np.in1d(df.index.date, pd.to_datetime(['2016-04-25', '2016-04-26']).date)] 

Or Vergleichen Sie die erzeugten Zeichenfolgen DatetimeIndex.strftime:

df = df[np.in1d(df.index.strftime('%Y-%m-%d'), ['2016-04-25', '2016-04-26'])] 

print (df) 
           A   B 
2016-04-25 18:50:06 440.967796 201.049600 
2016-04-25 18:50:13 441.054995 200.767034 
2016-04-25 18:50:20 441.142337 200.484475 
+0

Danke. Ich habe eine Follow-up-Frage. Ist es möglich, die ersten 'n' Datenzeilen an jedem einzelnen Tag abzuschneiden, ohne Daten zu kopieren? Die Tage haben unterschiedliche Start-/Endzeiten und unterschiedliche Anzahlen von Datenzeilen – user3142067

+0

Hmmm, probiere 'df = df.drop (df.groupby (df.index.date) .head (2) .index)' - Entferne den ersten 2-Wert von jedem Datum. – jezrael

+0

Scheint zu arbeiten. Vielen Dank – user3142067

Verwandte Themen