【问题标题】:Converting between datetime and Pandas Timestamp objects在 datetime 和 Pandas Timestamp 对象之间转换
【发布时间】:2014-05-14 13:21:28
【问题描述】:

我有以下几点:

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

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

我在this answer 上读到我可以使用pandas.to_datetime()Timestamps 转换为datetime 对象,但它似乎不起作用:

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

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

【问题讨论】:

    标签: python datetime pandas


    【解决方案1】:

    要回答从现有 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 已经在我的标准工具链中,所以我继续前进。

    【讨论】:

      【解决方案2】:

      Pandas 时间戳到 datetime.datetime:

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

      datetime.datetime 到时间戳

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

      【讨论】:

        【解决方案3】:

        您可以使用 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)
        

        【讨论】:

        • 谢谢。你知道to_datetime()to_pydatetime() 之间的区别以及为什么将Timestamp 对象传递给类方法pd.to_datetime 不起作用吗?
        • @user815423426 它适用于全局名称函数 (pd.to_datetime(ts))...不同之处在于 to_pydatetime 返回一个日期时间:)
        • 这个答案似乎不再有效。
        【解决方案4】:
        >>> 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')
        

        【讨论】:

        • 谢谢 - 我想应该将 to_datetime 作为对象方法运行,而不是作为类方法运行,但为什么呢?
        • @user815423426 似乎与其名字相反pd.to_datetime 总是返回Timestamp
        • 不适用于 pandas 0.24。说'Timestamp' object has no attribute 'to_datetime'
        • @Phoenix,你要找的方法是to_pydatetime()
        猜你喜欢
        • 2012-11-22
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多