2016-07-20 4 views
1

Ich habe einige CSV-Dateien mit folgendem Format:Parse Datum und Zeit bilden eine CSV-Datei

330913;23;2;2013;0;0;6;8;7 
330914;23;2;2013;0;5;25;8;7 
330915;23;2;2013;0;10;11;8;7 
330916;23;2;2013;0;15;30;8;7 
330917;23;2;2013;0;20;17;8;7 
330918;23;2;2013;0;25;4;8;7 

ich sie in eine Pandas Datenrahmen gelesen und müssen eine Spalte (sagen wir) 'dt' mit dem Datum angeben und Zeit. Mein bisher bester Versuch ist folgender:

df = pd.read_csv('./cucu.csv', sep=';', \ 
    header=None, dtype='str') 
df[ 'dt' ] = pd.to_datetime(\ 
    df[3]+df[2]+df[1]+df[4]+df[5]+df[6], \ 
    format='%Y%m%d%H%M%S') 

Meine Frage ist, wie mache ich das, ohne Strings zu behandeln? Ich bin mir ziemlich sicher, ich habe dies wie mit so etwas in der Vergangenheit getan:

df = pd.read_csv('./cucu.csv', sep=';', header=None, \ 
    parse_dates={'dt': [3,2,1,4,5,6]}) 

aber es funktioniert jetzt nicht: Ich bekomme eine Spalte dt mit Zeichenkette wie 2013 2 23 0 0 6

Was bin ich?

Antwort

2

Überprüfen Sie die read_csv Methode. Insbesondere ist die date_parser Kwarg, was Sie suchen. Es nimmt die resultierende Zeichenfolge, die von den Spalten parse_date erstellt wurde, und verarbeitet sie.

df = pd.read_csv('./cucu.csv', sep=';', header=None, parse_dates={'dt': [3,2,1,4,5,6]}, date_parser=lambda dts: pd.to_datetime(dts, format='%Y %m %d %H %M %S')) 
+0

Yup, das war es, danke! Eine Frage: Gibt es einen Grund, doppelte Klammern in "[[3,2,1,4,5,6]]" zu setzen? Scheint auch mit Single zu arbeiten ... – Luis

+0

Hmmm single list wirft einen Fehler für mich in diesem Code. – Alex

+0

@Luis Entsprechend der "Liste der Ints oder Namen von Dokumenten. Z. B. Wenn [1, 2, 3] -> versuchen Sie die Spalten 1, 2, 3 jeweils als separate Datumsspalte zu analysieren." und "Liste von Listen. z.B. Wenn [[1, 3]] -> Spalten 1 und 3 kombinieren und als eine einzelne Datumsspalte analysieren." – Alex