2017-04-25 139 views
0

是否可以转换类似的东西;将数组datatime.datetime转换为浮点数

array([datetime.datetime(2014, 2, 1, 0, 0, 0, 100000), 
     datetime.datetime(2014, 2, 1, 0, 0, 0, 300000), 
     datetime.datetime(2014, 2, 1, 0, 0, 0, 500000), ..., 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 500000), 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 700000), 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 900000)], dtype=object) 

这样:

array([ 1.39277301e+09, 1.39277301e+09, 1.39277301e+09, ..., 
     1.39285442e+09, 1.39285442e+09, 1.39285442e+09]) 

我基本上会喜欢的datetime.datetime转换为timestamp,与dtype = float

+0

什么是你想用来将日期时间转换为浮动的规则或映射?即为什么'datetime.datetime(2014,2,1,0,0,0,100000)'变为'1.39277301e + 09'? –

+0

看看使用'np.datetime64' – hpaulj

回答

0

最好的方式来获得timestamp是从datetime减去纪元:

邮编:

import datetime as dt 

times = np.array([ 
    dt.datetime(2014, 2, 1, 0, 0, 0, 100000), 
    dt.datetime(2014, 2, 1, 0, 0, 0, 300000), 
    dt.datetime(2014, 2, 1, 0, 0, 0, 500000), 
]) 

# get a datetime that is equal to epoch 
epoch = dt.datetime(1970, 1, 1) 

for t in [(d - epoch).total_seconds() for d in times]: 
    print('%.6f' % t) 

结果:

1391212800.100000 
1391212800.300000 
1391212800.500000 
+1

非常感谢。这实际上完全解决了我的问题。 –

0

怎么是这样的:

(Python的2.X):

import datetime 

temp_array = numpy.array([(i - datetime.datetime(1970, 1, 1)).total_seconds() for i in old_array]) 
new_array = temp_array.astype('float') 

对于Python 3.x的:

import datetime 

temp_array = numpy.array([(i - datetime.datetime(1970, 1, 1))/datetime.timedelta(seconds=1) for i in old_array]) 
new_array = temp_array.astype('float') 
0

mktime()将转换成一个时间戳,但它似乎失去准确性超越秒。

>>> import datetime 
>>> from time import mktime 

>>> x = datetime.datetime.now() 
>>> y = mktime(x.timetuple()) 
>>> print(y) 
1493096455.0 

>>> type(y) 
<type 'float'> 

>>> z = y/1000000000 
>>> print(z) 
1.493096455 
0
In [475]: x 
Out[475]: 
array([datetime.datetime(2014, 2, 1, 0, 0, 0, 100000), 
     datetime.datetime(2014, 2, 1, 0, 0, 0, 300000), 
     datetime.datetime(2014, 2, 1, 0, 0, 0, 500000), 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 500000), 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 700000), 
     datetime.datetime(2014, 2, 1, 19, 30, 0, 900000)], dtype=object) 
In [476]: x.astype('datetime64[us]') 
Out[476]: 
array(['2014-02-01T00:00:00.100000', '2014-02-01T00:00:00.300000', 
     '2014-02-01T00:00:00.500000', '2014-02-01T19:30:00.500000', 
     '2014-02-01T19:30:00.700000', '2014-02-01T19:30:00.900000'], dtype='datetime64[us]') 

每一个被保存为这被解释为一个日期时间的8字节浮点。

In [477]: _.dtype 
Out[477]: dtype('<M8[us]') 
In [478]: __.itemsize 
Out[478]: 8 

你可以改变单位(年,日等);做数学等

In [479]: x1=x.astype('datetime64[us]') 
In [480]: np.diff(x1) 
Out[480]: array([  200000,  200000, 70200000000,  200000,  200000], dtype='timedelta64[us]')