2017-12-09 4 views
0

ich verwende Python 3.5.3 mit Pandas 0.21.0pandas.to_datetime Rückkehr NaT ab 2270.12.31

Das folgende Datum in der Zukunft arbeitet:

pandas.to_datetime('2260-12-31', format='%Y-%m-%d', errors='coerce') 
Timestamp('2260-12-31 00:00:00') 

aber für den Start fron 2270 akzeptiert, gibt es nicht mehr:

pandas.to_datetime('2270-12-31', format='%Y-%m-%d', errors='coerce') 
NaT 

Wenn ich datetime.strptime es in allen Fällen funktioniert:

datetime.datetime.strptime('2270-12-31', '%Y-%m-%d') 
datetime.datetime(2270, 12, 31, 0, 0) 

oder

datetime.datetime.strptime('9999-12-31-23.59.59.999999', '%Y-%m-%d-%H.%M.%S.%f') 
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999) 

Ist es, weil Pandas einen Zeitstempel und die zweite eine datetime.datetime zurückkehren?

In der Pandas-Dokumentation sehe ich Folgendes, aber ich weiß nicht, was der Wert für Timestamp.max ist. Bei anderer Option gibt es im besten Fall die ursprüngliche Zeichenfolge zurück.

Im Fall, wenn es nicht möglich ist, bezeichneten Typen zurückzukehren (zB bei jedes Element von Eingang vor Timestamp.min ist oder nach Timestamp.max) Rückkehr wird datetime.datetime Typen (oder correspoding Array/Serie).

Gibt es eine Möglichkeit, es mit to_datetime arbeiten zu lassen? Es ist sehr praktisch, wenn Sie viele Spalten mit unterschiedlichen Datums- und Zeitstempelmustern haben und wenn Sie alle von Objekt in datetime64 [ns] in Ihrem Pandas-Datenrahmen transformieren möchten.

Antwort

1

Es funktioniert wie vorgesehen. Der Grund dafür ist, dass Zeitstempel eigentlich ganze Zahlen unter der Haube sind. Sie repräsentieren eine 64-Bit-Ganzzahl + eine Offset-Zeit. In diesem Fall ist '2270-12-31' zu weit vom Offset entfernt, um in eine 64-Bit-Ganzzahl zu passen, so dass es keine Zeit gibt.

+0

ja, ich war zu schnell. Hier der Maximalwert Timestamp ('2262-04-11 23: 47: 16.854775807'): [link] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timestamp.max.html) –