Ik heb het volgende:
> date1
Timestamp('2014-01-23 00:00:00', tz=None)
> date2
datetime.date(2014, 3, 26)
en ik las op dit antwoorddat ik pandas.to_datetime()
zou kunnen gebruiken om converteer van Timestamps
naar datetime
objecten, maar het lijkt niet te werken:
> pd.to_datetime(date1)
Timestamp('2014-01-23 00:00:00', tz=None)
Waarom? Hoe kan ik tussen deze twee formaten converteren?
Antwoord 1, autoriteit 100%
Je kunt de methode to_pydatetime gebruiken om explicieter te zijn:
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)
Het is ook beschikbaar op een DatetimeIndex:
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)
Antwoord 2, autoriteit 15%
Panda’s tijdstempel tot datetime.datetime:
pd.Timestamp('2014-01-23 00:00:00', tz=None).to_pydatetime()
datetime.datetime naar tijdstempel
pd.Timestamp(datetime(2014, 1, 23))
Antwoord 3, autoriteit 6%
>>> 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')
Antwoord 4
Om de vraag te beantwoorden om van een bestaande python te gaan datetime naar een panda Tijdstempeldoe het volgende:
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))
Uitvoer:
(<class 'pandas._libs.tslibs.timestamps.Timestamp'>) 2020-09-05 23:38:55
Ik hoopte op een elegantere manier om dit te doen, maar de to_posix_ts
zit al in mijn standaard gereedschapsketen, dus ik ga verder.