2016-07-28 8 views
2

Ich habe eine .csv-Datei, die 2 separate Spalten für 'Date' und ' Time' hat. Ich lese die Datei wie folgt:Der schnellste Weg zum Parsen von Daten in Python beim Lesen von .csv-Datei?

data1 = pd.read_csv('filename.csv', parse_dates=['Date', 'Time']) 

Aber es scheint, dass nur die ' Date' Spalte in Zeitformat ist, während die 'Time' Spalte noch Zeichenfolge ist oder in einem anderen Format als Zeitformat.

Wenn ich Folgendes tun:

data0 = pd.read_csv('filename.csv') 
data0['Date'] = pd.to_datetime(data0['Date']) 
data0['Time'] = pd.to_datetime(data0['Time']) 

Es gibt einen Datenrahmen ich will, aber dauert geraume Zeit. Also, was ist der schnellste Weg, um die Datei einzulesen und das Datum und die Uhrzeit aus einem String-Format zu konvertieren?

Die CSV-Datei ist wie folgt:

   Date  Time  Open  High  Low  Close 
0  2004-04-12 8:31 AM 1139.870 1140.860 1139.870 1140.860  
1  2005-04-12 10:31 AM 1141.219 1141.960 1141.219 1141.960  
2  2006-04-12 12:33 PM 1142.069 1142.290 1142.069 1142.120  
3  2007-04-12 3:24 PM 1142.240 1143.140 1142.240 1143.140  
4  2008-04-12 5:32 PM 1143.350 1143.589 1143.350 1143.589  

Dank!

+0

Es hilft ein Beispiel für Ihre csv zu geben. Vielleicht die ersten 10 Zeilen oder so. –

+0

BTW, das Datum ist im JJJJ-MM-TT-Format und die Zeit ist in einem Format wie: 9:31 AM oder 3:31 PM. –

Antwort

2

Hier, in Ihrem Fall 'Zeit' ist in AM/PM Format, das mehr Zeit in Anspruch nehmen zu analysieren.

Sie können das Format hinzufügen, um die Geschwindigkeit der to_datetime() Methode zu erhöhen.

data0=pd.read_csv('filename.csv') 

# %Y - year including the century 
# %m - month (01 to 12) 
# %d - day of the month (01 to 31) 
data0['Date']=pd.to_datetime(data0['Date'], format="%Y/%m/%d") 

# %I - hour, using a -hour clock (01 to 12) 
# %M - minute 
# %p - either am or pm according to the given time value 
# data0['Time']=pd.to_datetime(data0['Time'], format="%I:%M %p") -> around 1 sec 
data0['Time']=pd.datetools.to_time(data0['Time'], format="%I:%M %p") 

Weitere Methoden Info: Pandas Tools

Weitere Formatoptionen prüfen - datetime format directives.

Für 500K Reihen verbesserte Geschwindigkeit von ca. 60 Sekunden -> 0,01 Sekunden in meinem System.

Sie können auch verwenden:

# Combine date & time directly from string format 
pd.Timestamp(data0['Date'][0] + " " + data0['Time'][0]) 
+0

Vielen Dank! Du hast mein Problem perfekt gelöst. –