2017-06-22 3 views
0

Ich rufe normalerweise Daten aus einer csv-Datei und pandas.to_datetime Funktion verwenden, um die Datumsspalten in das Datetime-Format für die weitere Datenverarbeitung zu ändern.Python pandas to_datetime arbeitet nicht stetig

Manchmal funktioniert die to_datetime-Funktion jedoch gut und manchmal nicht. Es funktioniert nicht ständig und ich verwende normalerweise eine Menge Zeit, um das Datenformat zu ändern.

Ich habe viele Methoden ausprobiert, aber sie alle arbeiten nicht stetig. Würde jemand bitte bitte mir helfen, dieses Problem zu lösen?

df1 = pd.read_csv("somefile.csv", encoding='utf-8', parse_dates=[0]) 
# the result turns out that the parse_dates does not work at all here 

df1["Date"]= df1["Date"].apply(pd.to_datetime) 
# after this change, the type(df1["Date"][0]) becomes pandas._libs.tslib.Timestamp 

df1["Date"] = df1["Date"].dt.date.apply(lambda x: datetime.date(x.year,x.month,x.day)) 
# this code worked yesterday but not today anymore... 
# TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int' 

Der Fehlercode hier sagt „Schlagwort‚date‘erfordert ein‚datetime.datetime‘Objekt, sondern erhielt ein‚int‘“ Ich mag würde die Art von df [ „Datum“] in Datetime-Typen ändern anstelle des Zeitstempels.

Meine Pandas Datenrahmen sieht wie folgt aus (nur die Datumsspalte angezeigt) Die Rohdaten werden hier zur Verfügung gestellt: https://www.dropbox.com/s/rrhy9my9yp1gy2y/test.csv?dl=0

Date 
2015-01-07 
2015-01-08 
2015-01-09 
2015-01-10 
2015-01-11 

Meine Python-Version 2.7 frustriert Got mit diesem Problem für eine Weile, Menschen außer Ich Everyones to_datetime Funktion funktioniert gut?

+0

es helfen würde, wenn Sie Rohdaten posten könnte, und demonstrieren, warum Sie denken, dass es nicht funktioniert – EdChum

+0

bitte bitte die Fehlermeldung Typ eError: Der Deskriptor "date" benötigt ein "datetime.datetime" -Objekt, erhält aber ein "int". Ich konnte nur die Daten in Timestamp, aber nicht Datetime konvertieren –

+0

Wieder bitten ich Sie, Rohdaten und Code zur Verfügung zu stellen, der Ihr Problem reproduziert, das 'parse_dates' arg von' read_csv' kann mehrere Spalten in 'datetime',' pd.to_datetime' analysieren ist auch ziemlich robust. Bearbeiten Sie Ihre Frage mit Daten, Code, gewünschte Ausgabe und Fehler – EdChum

Antwort

1

Sie benötigen apply zu entfernen, müssen nur Series.dt.date:

df1 = pd.read_csv('test.csv', parse_dates=[0]) 

df1["Date"] = df1["Date"].dt.date.apply(lambda x: datetime.date(x.year,x.month,x.day)) 

zu:

df1["Date"] = df1["Date"].dt.date 

print (type(df1.loc[0, 'Date'])) 
<class 'datetime.date'> 

Aber wenn brauchen Tupeln:

df1["Date"] = df1["Date"].dt.date.apply(lambda x: (x.year,x.month,x.day)) 
print (df1.head()) 
      Date trend 
0 (2015, 1, 7)  37 
1 (2015, 1, 8)  37 
2 (2015, 1, 9)  37 
3 (2015, 1, 10)  37 
4 (2015, 1, 11)  38 
Verwandte Themen