2016-03-25 6 views
0

Ich bin durch etwas in Pandas 0.18.0 verwirrt. In meinen Eingabe-CSV-Daten soll ein Feld Daten als JJJJMMTT-Zeichenfolgen enthalten, aber bei einigen Zeilen fehlt oder falsch formatiert. Ich möchte diese Spalte als datetime mit Daten darstellen, wo möglich und wo nicht.Warum erzeugt to_datetime nur fehlende Werte für eine Float-Spalte in Pandas?

versuchte ich mehrere Optionen, und was ich am weitesten nicht wurde mit parse_dates auf den Tisch (mit read_table) in zu lesen, aber dann mit pandas.to_datetime(DataFrame['Seriesname'], errors='coerce',format='%Y%m%d') die Umwandlung Nötigung. Dies ist robust gegenüber Tippfehlern, wo die Zahl kein Datum darstellen kann (denken Sie an '20100231', Spalte zuerst als int64 importiert) oder wenn die Zeichenfolge überhaupt keine Zahl darstellt (denken Sie an '2o1oo228', Spalte an object beim Importieren).

Diese Methode ist nicht robust, wenn die Spalten nur Zahlen enthalten, aber ein Feld leer ist. Dann read_table importiert die gesamte Spalte als float64 (keine int64, die keine fehlenden Werte in numpy hat), und die obige Konvertierung erzeugt alle fehlenden, auch für Zeilen, in denen die Daten sinnvoll sind.

Gibt es einen Weg um dies?

+0

Was meinst du mit "keine Konvertierung"? Können Sie nicht einfach die Konvertierungsoptionen so einstellen, dass diese Spalte als String bleibt? – BrenBarn

+0

@BrenBarn Siehe die Bearbeitung, danke. –

Antwort

0

Der beste Weg könnte sein, float insgesamt zu vermeiden. Unterbrechen Sie die Umwandlung in numerische Werte in read_table, indem Sie dtype angeben, wobei die Spalte object beibehalten wird. to_datetime behandelt wie vorgesehen.

HT: BrenBarn in den Kommentaren.

Verwandte Themen