2017-08-09 84 views
0

我正在構建一個交易策略回溯測試,它以存儲日期作爲索引。有人可以解釋日期的以下類型數據的差異(以及進行賦值時的可變性)嗎?不同類型的熊貓和python中的日期類型

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'> 

這將是巨大的,如果有人能在細節他們的差異和可變性做變量賦值時,解釋一下嗎?

回答

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

根據the docsDatetimeIndex是:

不可變 ndarray datetime64數據的,內部表示爲Int64類型,並且可以盒裝到是日期時間的子類和攜帶元數據,如時間戳對象頻率信息。

ts = dti[0] 

此外,熊貓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對象的年份沒怎麼改變。取而代之的是替換方法返回一個新的Timestamp對象。

最後,相對於天然蟒datetime目的,根據the python docs

這些類型的對象是不可變的。

這裏是關於在代表日期時間的不同類型之間轉換的good SO post

那麼,爲什麼你會使用一個而不是另一個?

datetimes可能是一個痛苦的工作。這就是爲什麼熊貓創建了自己的包裝類(Timestamp)。元數據存儲在這些對象上,使他們的操作更容易。 DatetimeIndex只是numpy datetime64對象的序列,這些對象被裝箱到Timestamp對象中以實現附加功能。例如使用Timestamp/DatetimeIndex您可以:

  • 添加一定數量的工作日到datetimeindex。
  • 創建跨越特定週數的序列。
  • 更改時區。

所有這些事情是沒有額外的方法和元數據存儲在TimestampDatetimeIndex類皇家疼痛。

查看pandas docs獲取更多示例。