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

问题描述 投票:0回答:1

根据手册

pd.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_datetime()
Out[2]: datetime.datetime(2012, 5, 14, 0, 0)

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

python datetime pandas timestamp
1个回答
25
投票

A

Timestamp
对象是 pandas 处理日期时间的方式,因此它 pandas 中的日期时间对象。但你期望的是一个
datetime.datetime
对象。
通常你不应该关心这个(这只是不同的代表的问题)。只要您使用 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
    的子类,因此拥有它的所有方法。
© www.soinside.com 2019 - 2024. All rights reserved.