2017-04-16 26 views
1

爲什麼numpy開始在新版本中將date對象轉換爲datetime64 [s]類型的對象?如何使它向後兼容?Numpy將日期對象轉換爲datetime64 [s]在更新的版本中

實施例:

代碼片斷

import datetime 
import numpy as np 

dt = datetime.date(1970, 1, 1) 

array = np.array([dt], dtype='datetime64[s]') 

array 

結果

**Numpy version 1.12.0** 

array(['1970-01-01T00:00:00'], dtype='datetime64[s]') 

**Numpy version 1.9.3** 

TypeError: Cannot cast datetime.date object from metadata [D] to [s] according to the rule 'same_kind' 
+0

這是否回答幫助http://stackoverflow.com/a/37444604/2254228? – Chuck

+1

是的,有點。謝謝@CMorris。 – Sid

回答

1

嘗試` 'd' 中間體:

In [27]: np.array([dt],'datetime64[D]') 
Out[27]: array(['1970-01-01'], dtype='datetime64[D]') 
In [28]: np.array([dt],'datetime64[D]').astype('datetime64[s]') 
Out[28]: array(['1970-01-01T00:00:00'], dtype='datetime64[s]') 

雖然在我的版本,直接創造的工作原理:

In [29]: np.array([dt],'datetime64[s]') 
Out[29]: array(['1970-01-01T00:00:00'], dtype='datetime64[s]') 
In [30]: np.__version__ 
Out[30]: '1.12.0' 
In [31]: dt 
Out[31]: datetime.date(1970, 1, 1) 
+0

謝謝。這工作。但是,我怎麼能發現dt的實際單位是'D'而不是's'? – Sid

+0

此外,它也適用於我的更新版本。但我想檢查dt是datetime64 [D]兼容還是datetime64 [s]兼容? 與datetime.date(1970,1,1)類似,datetime64 [D]類型兼容,但datetime.datetime(1970,1,1,10,30)與datetime64 [s]類型兼容。 – Sid

相關問題