2017-02-27 3 views
0

Ich habe ein Datenframe, das die Spalten a bis f enthält. Die Spalten b, d und f sind Daten, die ich vom Typ datetime mit pandas.to_datetime erstellen möchte. Hier ist mein Code:Python Dataframe to_datetime Syntax für mehrere Spalten

file = pd.read_csv(filename, usecols=my_columns, engine='python') 
df = pd.DataFrame(file) 
df['b', 'd', 'f'] = pd.to_datetime(df['b', 'd', 'f']) 
print('FINISHED') 

Allerdings, wenn ich meinen Code ausführen, scheint es zu stecken. Ich bekomme keine Fehler, aber "FERTIG" druckt nie. Ich denke, dass meine Syntax in der Zeile to_datetime falsch ist, aber ich bin mir nicht sicher, warum und ich weiß nicht, wie ich es beheben soll. Mein Datenrahmen hat ungefähr 1.000 Reihen darin. Ich bin ziemlich neu in Python. Was mache ich falsch?

Dank

+0

I don t denke, diese rechtliche Syntax: 'df [ 'b', 'd', 'f']', außer Sie 'parse_dates = versuchen geben sollte [ 'b', 'd', 'f'] 'zu' pd.read_csv', da Sie möglicherweise den Nachbearbeitungsschritt benötigen. Der Grund, warum das nicht funktioniert, ist, dass es eine Spalte gibt, die ein Tupel ('b', 'd', 'f') ist, das wahrscheinlich einen 'KeyError' auslösen wird, da es nicht existiert – EdChum

Antwort

0

Beispiel dauert Daten von Excel, die als CSV gespeichert wurden.

In [18]: df 
Out[18]: 
     a  b  c 
0 1/1/17 1/1/17 1/1/17 
1 1/2/17 1/2/17 1/2/17 
2 1/3/17 1/3/17 1/3/17 
7 1/8/17 1/8/17 1/8/17 
8 1/9/17 1/9/17 1/9/17 
9 1/10/17 1/10/17 1/10/17 

Verwenden Sie Zwang, um Fehler wie diese zu vermeiden.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) 

Die Schleife ausführen.

In [26]: for col in df.columns: 
    ...:  df[col] = pd.to_datetime(df[col], errors='coerce') 

Und Sie erhalten Ihre gewünschte Ausgabe.

In [27]: df 
Out[27]: 
      a   b   c 
0  NaT 2017-01-01 2017-01-01 
1 2017-01-02 2017-01-02 2017-01-02 
2 2017-01-03 2017-01-03 2017-01-03 
3 2017-01-04 2017-01-04 2017-01-04 
4 2017-01-05 2017-01-05 2017-01-05 
5 2017-01-06 2017-01-06 2017-01-06 
6 2017-01-07 2017-01-07 2017-01-07 
7 2017-01-08 2017-01-08 2017-01-08 
8 2017-01-09 2017-01-09 2017-01-09 
9 2017-01-10 2017-01-10 2017-01-10 
1

Ich glaube, Sie die to_datetime Methode falsch verwenden. Versuchen Sie es einfach

cols = ['b','d','f'] 
for col in cols: 
    df[col] = pd.to_datetime(col) 
Verwandte Themen