Problem hier ist, wie Sie Daten importieren. Es gibt keine Anzeige, ob 04:00 Uhr oder Uhr ist? Aufgrund Ihrer Kommentare müssen wir jedoch davon ausgehen, dass es sich um eine PM handelt. Die Eingabe zeigt es jedoch als AM an.
Um dies zu lösen, müssen wir zwei Bedingungen in die OR-Klausel aufnehmen.
- 9: 30-11: 59
- 0: 00-4: 00
Eingang:
df = pd.DataFrame({'date': {880551: '2015-07-06 04:00:00', 880552: '2015-07-06 04:02:00',880553: '2015-07-06 04:03:00', 880554: '2015-07-06 04:04:00', 880555: '2015-07-06 04:05:00'},
'open': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.08, 880555: 125.12},
'high': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.11, 880555: 125.12},
'low': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
'close': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
'volume': {880551: 141, 880552: 200,880553: 750, 880554: 17451, 880555: 1000},
},
)
df.head()
date open high low close volume
880551 2015-07-06 04:00:00 125.00 125.00 125.00 125.00 141
880552 2015-07-06 04:02:00 125.36 125.36 125.32 125.32 200
880553 2015-07-06 04:03:00 125.34 125.34 125.21 125.21 750
880554 2015-07-06 04:04:00 125.08 125.11 125.05 125.05 17451
880555 2015-07-06 04:05:00 125.12 125.12 125.12 125.12 1000
from datetime import time
start_first = time(9, 30)
end_first = time(11, 59)
start_second = time(0, 00)
end_second = time(4,00)
df['date'] = pd.to_datetime(df['date'])
df= df[(df['date'].dt.time.between(start_first, end_first)) | (df['date'].dt.time.between(start_second, end_second))]
df
date open high low close volume
880551 2015-07-06 04:00:00 125.0 125.0 125.0 125.0 141
Oben ist keine gute Praxis, und ich rate dringend davon ab, diese Art von mehrdeutigen Daten zu verwenden. Langzeitlösung besteht darin, Daten korrekt mit am / pm zu füllen.
Bei korrektem Datenformat können wir dies auf zwei Arten erreichen:
1) mit datetime
from datetime import time
start = time(9, 30)
end = time(16)
df['date'] = pd.to_datetime(df['date'])
df= df[df['date'].dt.time.between(start, end)]
2) Verwenden zwischen Zeit, die nur mit Datetime Index funktioniert
df['date'] = pd.to_datetime(df['date'])
df = (df.set_index('date')
.between_time('09:30', '16:00')
.reset_index())
Wenn Sie immer noch auf Fehler stoßen, bearbeiten Sie Ihre Frage zeilenweise und mit genauem Fehler.
date
. Könnten Sie diesen Befehl ausführenprint(df['date'].map(type))
und seine Ausgabe an die Frage senden?