2017-07-17 4 views
3

ich einen Datenrahmen aus CSV-Datei wie folgt,Pandas lesen csv Datenrahmen Zeilen aus bestimmten Datum und Zeitbereich

  TimeStamp 
0  12/7/2017 8:00 
1  12/7/2017 7:00 
2  12/7/2017 6:00 
3  12/7/2017 5:00 
4  12/7/2017 4:00 
5  12/7/2017 3:00 
6  12/7/2017 2:00 
7  12/7/2017 1:00 
8  12/7/2017 0:00 
9  11/7/2017 23:00 
10  11/7/2017 22:00 
... 
9996  3/12/2015 6:00 
9997  3/12/2015 5:00 
9998  3/12/2015 4:00 
9999  3/12/2015 3:00 
Name: TimeStamp, Length: 10000, dtype: object 

Ich versuche Pandas zu verwenden, um die Daten von einem bestimmten Datum und Zeitbereich zum Beispiel zu lesen , von 11/7/2017 8:00 bis 12/7/2017 8:00.

Ich habe versucht, Boolean mask, DatetimeIndex und .Between Methoden zu verwenden und es Daten aus diesem Bereich und von 2016 und 2015 sowie gelesen. Hier sind meine Codes,

import pandas as pd 

eurusd = pd.read_csv('fxhistoricaldata_EURUSD_hour.csv') 
eurusd = eurusd[(eurusd['TimeStamp'] >= '11/7/2017 8:00') & 
(eurusd['TimeStamp'] <= '12/7/2017 8:00')] 

print(eurusd['TimeStamp']) 

oder .Zwischen verwenden,

eurusd = eurusd[eurusd['TimeStamp'].between('11/7/2017 8:00', '12/7/2017 8:00')] 

Die Ergebnisse sind als solche,

2  12/7/2017 6:00 
3  12/7/2017 5:00 
4  12/7/2017 4:00 
5  12/7/2017 3:00 
6  12/7/2017 2:00 
7  12/7/2017 1:00 
8  12/7/2017 0:00 
23  11/7/2017 9:00 
24  11/7/2017 8:00 
513  12/6/2017 23:00 
514  12/6/2017 22:00 
515  12/6/2017 21:00 
516  12/6/2017 20:00 
517  12/6/2017 19:00 
518  12/6/2017 18:00 
519  12/6/2017 17:00 
520  12/6/2017 16:00 
521  12/6/2017 15:00 
522  12/6/2017 14:00 
523  12/6/2017 13:00 
524  12/6/2017 12:00 
525  12/6/2017 11:00 
     ...  
8827  12/2/2016 5:00 
8828  12/2/2016 4:00 
8829  12/2/2016 3:00 
Name: TimeStamp, Length: 305, dtype: object 

Kann jemand mir helfen, mein Problem zu beheben, oder gibt es jede Funktion, die Kann mir helfen, meine Aufgabe zu erfüllen? Jede Hilfe wird sehr geschätzt!

+2

wandeln die Timestamp-Spalte wie 'eurusd [ 'Timestamp'] = pd.to_datetime (eurusd [ 'Timestamp'])' und Ihre Lösung funktionieren wird. – shivsn

+0

oder parse_dates = True für read_csv verwenden –

Antwort

2

Sie müssen eurusd['TimeStamp'] um sicherzustellen, dass eine Reihe mit dtype datetime64[ns]:

eurusd['TimeStamp'] = pd.to_datetime(eurusd['TimeStamp']) 

erstellen boolean Maske:

mask = (eurusd['TimeStamp'] > start_date) & (eurusd['TimeStamp'] <= end_date) 

Jetzt neu zuweisen (oder was auch immer Sie wa nt mit dem Ausgang zu tun):

eurusd = eurusd.loc[mask] 
1

Sie können dies mit dem Datetime und dateutil Bibliotheken:

from dateutil import parser 
from datetime import datetime 

df['TimeStamp'] = df['TimeStamp'].apply(lambda x: parser.parse(x)) 

df[(df['TimeStamp'] < datetime(2017, 12, 7)) & (df['TimeStamp']> datetime(2015, 3, 12))] #or whichever dates you're looking for 
Verwandte Themen