Konvertieren zwischen datetime- und Pandas Timestamp-Objekten


70

Ich habe folgendes:

> date1
Timestamp('2014-01-23 00:00:00', tz=None)

> date2
datetime.date(2014, 3, 26)

und ich habe diese Antwort gelesen , die ich pandas.to_datetime()zum Konvertieren von Timestampsin datetimeObjekte verwenden könnte, aber es scheint nicht zu funktionieren:

> pd.to_datetime(date1)   
Timestamp('2014-01-23 00:00:00', tz=None)

Warum? Wie kann ich zwischen diesen beiden Formaten konvertieren?

Antworten:


105

Sie können die to_pydatetime-Methode verwenden, um genauer zu sein:

In [11]: ts = pd.Timestamp('2014-01-23 00:00:00', tz=None)

In [12]: ts.to_pydatetime()
Out[12]: datetime.datetime(2014, 1, 23, 0, 0)

Es ist auch in einem DatetimeIndex verfügbar:

In [13]: rng = pd.date_range('1/10/2011', periods=3, freq='D')

In [14]: rng.to_pydatetime()
Out[14]:
array([datetime.datetime(2011, 1, 10, 0, 0),
       datetime.datetime(2011, 1, 11, 0, 0),
       datetime.datetime(2011, 1, 12, 0, 0)], dtype=object)

1
Vielen Dank. Wissen Sie, dass der Unterschied zwischen to_datetime()und besteht to_pydatetime()und warum das Übergeben eines TimestampObjekts an die Klassenmethode pd.to_datetimenicht funktioniert?
Amelio Vazquez-Reina

1
@ user815423426 es funktioniert auf der globalen Namensfunktion (pd.to_datetime (ts)) ... Unterschied ist, dass to_pydatetime eine datetime zurückgibt :)
Andy Hayden

8

Pandas Timestamp to datetime.datetime:

pd.Timestamp('2014-01-23 00:00:00', tz=None).to_pydatetime()

datetime.datetime zu Timestamp

pd.Timestamp(datetime(2014, 1, 23))

7
>>> pd.Timestamp('2014-01-23 00:00:00', tz=None).to_datetime()
datetime.datetime(2014, 1, 23, 0, 0)
>>> pd.Timestamp(datetime.date(2014, 3, 26))
Timestamp('2014-03-26 00:00:00')

1
Danke - ich denke, man sollte to_datetimeals Objektmethode laufen , aber nicht als Klassenmethode, aber warum?
Amelio Vazquez-Reina

8
@ user815423426 es scheint entgegen seinem Namen pd.to_datetimeimmer zurück zu gebenTimestamp
behzad.nouri

6
funktioniert nicht bei Pandas 0.24. sagt'Timestamp' object has no attribute 'to_datetime'
Phoenix

1
@Phoenix, die Methode, die Sie suchen, ist to_pydatetime().
Keiron Stoddart

0

Gehen Sie wie folgt vor , um die Frage zu beantworten, ob Sie von einer vorhandenen Python- Datumszeit zu einem Pandas- Zeitstempel wechseln möchten :

    import time, calendar, pandas as pd
    from datetime import datetime
    
    def to_posix_ts(d: datetime, utc:bool=True) -> float:
        tt=d.timetuple()
        return (calendar.timegm(tt) if utc else time.mktime(tt)) + round(d.microsecond/1000000, 0)
    
    def pd_timestamp_from_datetime(d: datetime) -> pd.Timestamp:
        return pd.to_datetime(to_posix_ts(d), unit='s')
    
    dt = pd_timestamp_from_datetime(datetime.now())
    print('({}) {}'.format(type(dt), dt))

Ausgabe:

(<class 'pandas._libs.tslibs.timestamps.Timestamp'>) 2020-09-05 23:38:55

Ich hatte auf einen eleganteren Weg gehofft, aber der to_posix_tsist bereits in meiner Standard-Werkzeugkette enthalten, also gehe ich weiter.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.