【问题标题】:Why does pandas return timestamps instead of datetime objects when calling pd.to_datetime()?为什么 pandas 在调用 pd.to_datetime() 时返回时间戳而不是 datetime 对象?
【发布时间】:2014-07-08 10:34:12
【问题描述】:

根据manualpd.to_datetime()应该创建一个日期时间对象。

相反,当我调用pd.to_datetime("2012-05-14") 时,我得到了一个时间戳对象!在该对象上调用 to_datetime() 最终给了我一个日期时间对象。

In [1]: pd.to_datetime("2012-05-14")
Out[1]: Timestamp('2012-05-14 00:00:00', tz=None)

In [2]: t = pd.to_datetime("2012-05-14")
In [3]: t.to_datime()
Out[2]: datetime.datetime(2012, 5, 14, 0, 0)

对这种意外行为有解释吗?

【问题讨论】:

    标签: python datetime pandas timestamp


    【解决方案1】:

    Timestamp 对象是 pandas 处理日期时间的方式,因此它 pandas 中的日期时间对象。但您期望的是 datetime.datetime 对象。
    通常你不应该关心这个(这只是一个不同的代表问题)。只要您使用熊猫,时间戳就可以了。即使你真的想要一个datetime.datetime,大多数事情都会起作用(例如所有方法),否则你可以使用to_pydatetime 来检索datetime.datetime 对象。

    更长的故事:

    • pandas 将日期时间存储为索引/列中 datetime64 类型的数据(这不是 datetime.datetime 对象)。这是日期时间的标准 numpy 类型,比使用 datetime.datetime 对象更高效:

       In [15]: df = pd.DataFrame({'A':[dt.datetime(2012,1,1), dt.datetime(2012,1,2)]})
      
       In [16]: df.dtypes
       Out[16]:
       A    datetime64[ns]
       dtype: object
      
       In [17]: df.loc[0,'A']
       Out[17]: Timestamp('2012-01-01 00:00:00', tz=None)
      
    • 在检索此类日期时间列/索引的一个值时,您将看到一个Timestamp 对象。这是一个使用日期时间更方便的对象(比 datetime64 更多的方法、更好的表示等),这是 datetime.datetime 的子类,它的所有方法也是如此。

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 2020-02-08
      • 2016-05-29
      • 2019-11-30
      • 2016-12-15
      • 2011-06-30
      • 2016-12-22
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多