根据手册,
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)
对于这种意外行为有解释吗?
A
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
的子类,因此拥有它的所有方法。