pandas和python中不同类型的日期类型

时间:2017-08-09 14:30:03

标签: python python-3.x pandas datetime

我正在制定一个交易策略回溯测试,它与将日期存储为索引有关。有人可以解释日期的以下类型数据的差异(以及分配时的可变性)吗?

a=pd.date_range('1/1/2016',periods=10,freq='w')
b=datetime.datetime(2016,1,4)
c=pd.datetime(2016,1,4)
d=pd.Timestamp(153543453435)

打印时,数据类型如下:

<class 'pandas.core.indexes.datetimes.DatetimeIndex'> (print(type(a))
<class 'pandas._libs.tslib.Timestamp'> (print(type(a[0]))
<class 'datetime.datetime'>
<class 'datetime.datetime'>
<class 'pandas._libs.tslib.Timestamp'>

如果有人能够详细解释他们的差异以及进行变量分配时的可变性,那会很棒吗?

1 个答案:

答案 0 :(得分:3)

dti = pd.date_range('1/1/2016',periods=10,freq='w')

根据the docs DatetimeIndex是:

  

不可变日期时间64数据的ndarray,内部表示为int64,可以装入作为datetime子类的Timestamp对象,并携带频率信息等元数据。

ts = dti[0]

此外,pandas Timestamp对象被设计为不可变的:

ts  # returns Timestamp('2016-01-03 00:00:00', freq='W-SUN')
ts.replace(year=2015)  # returns Timestamp('2015-01-03 00:00:00', freq='W-SUN')
ts  # returns Timestamp('2016-01-03 00:00:00', freq='W-SUN')

请注意原始Timestamp对象的年份未发生变化。相反,replace方法返回了一个新的Timestamp对象。

最后,关于本地python datetime对象,根据the python docs

  

这些类型的对象是不可变的。

这是关于在表示日期时间的不同类型之间进行转换的good SO post

那么你为什么要使用一个而不是另一个呢?

datetimes可能会很痛苦。这就是为什么pandas创建了自己的包装类(Timestamp)。元数据存储在这些对象上,使操作更容易。 DatetimeIndex只是一系列numpy datetime64个对象,它们被添加到Timestamp个对象中以增加功能。例如,您可以使用Timestamp / DatetimeIndex

  • 将一定数量的工作日添加到datetimeindex。
  • 创建跨越特定周数的序列。
  • 更改时区。

如果没有TimestampDatetimeIndex类中存储的额外方法和元数据,所有这些都将是一种巨大的痛苦。

请查看pandas docs了解更多示例。