为什么pandas在调用pd.to_datetime()时会返回时间戳而不是datetime对象?

时间:2014-05-20 08:53:29

标签: python datetime pandas timestamp

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

是否有这种意外行为的解释?

1 个答案:

答案 0 :(得分:6)

一个Timestamp对象是pandas与日期时间一起工作的方式,因此 是pandas中的日期时间对象。但是你期望一个datetime.datetime对象 通常你不应该关心这个(这只是一个不同的repr的问题)。只要您使用pandas,时间戳就可以了。即使你真的想要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的子类,所以它的所有方法都是如此。