在datetime和Pandas Timestamp对象之间转换


70

我有以下内容:

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

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

我读了这个答案,我可以用它pandas.to_datetime()来转换Timestampsdatetime对象,但似乎不起作用:

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

为什么?如何在这两种格式之间转换?

Answers:


105

您可以使用to_pydatetime方法更明确:

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)

它在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)

1
谢谢。你知道吗,不同的是之间to_datetime()to_pydatetime()为什么传递一个Timestamp对象类方法pd.to_datetime不是没有工作?
Amelio Vazquez-Reina

1
@ user815423426它适用于全局名称功能(pd.to_datetime(ts))...区别在于to_pydatetime返回日期时间:)
Andy Hayden


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
谢谢-我猜应该to_datetime以一种对象方法运行,而不是以类方法运行,但是为什么呢?
Amelio Vazquez-Reina 2014年

8
@ user815423426似乎相反它的名字pd.to_datetime总是返回Timestamp
behzad.nouri

6
在熊猫0.24上不起作用。说'Timestamp' object has no attribute 'to_datetime'
凤凰城

1
@Phoenix,您正在寻找的方法是to_pydatetime()
Keiron Stoddart

0

要回答从现有的python datetime转换为pandas Timestamp的问题,请执行以下操作:

    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))

输出:

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

我希望有一种更优雅的方法来执行此操作,但是to_posix_ts它已经在我的标准工具链中,因此我继续前进。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.