将浮点数组转换为datetime

时间:2018-03-16 18:01:30

标签: python numpy datetime timedelta

我正在努力将一个浮点数组(带小数位的数字)转换为datetime。我所拥有的是一个巨大的数组,其中包含非整数(如使用Microsoft Excel生成的数组),表示某个日期之后的天数。 如果我只为1个浮点数做,例如28.79167,从初始日期01/01/2014开始,我会这样做如下:

date = datetime(2014,01,01) + timedelta(days=28.79167)
print date
Out[142]: datetime.datetime(2014, 1, 29, 19, 0, 0, 288000)

看起来正确! 但是,当我有一个阵列时,请说下面的那个:

dcc = np.arange(0,10,0.5)
print dcc
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5,  5. ,
    5.5,  6. ,  6.5,  7. ,  7.5,  8. ,  8.5,  9. ,  9.5])

然后我会这样做:

date = [datetime(2014,01,01) + timedelta(days=dcc[i]) for i in dcc]

给出:

/usr/bin/ipython:1: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future #! /usr/bin/python

print date
Out[138]:
[datetime.datetime(2014, 1, 1, 0, 0),
datetime.datetime(2014, 1, 1, 0, 0),
datetime.datetime(2014, 1, 1, 12, 0),
datetime.datetime(2014, 1, 1, 12, 0),
datetime.datetime(2014, 1, 2, 0, 0),
datetime.datetime(2014, 1, 2, 0, 0),
datetime.datetime(2014, 1, 2, 12, 0),
datetime.datetime(2014, 1, 2, 12, 0),
datetime.datetime(2014, 1, 3, 0, 0),
datetime.datetime(2014, 1, 3, 0, 0),
datetime.datetime(2014, 1, 3, 12, 0),
datetime.datetime(2014, 1, 3, 12, 0),
datetime.datetime(2014, 1, 4, 0, 0),
datetime.datetime(2014, 1, 4, 0, 0),
datetime.datetime(2014, 1, 4, 12, 0),
datetime.datetime(2014, 1, 4, 12, 0),
datetime.datetime(2014, 1, 5, 0, 0),
datetime.datetime(2014, 1, 5, 0, 0),
datetime.datetime(2014, 1, 5, 12, 0),
datetime.datetime(2014, 1, 5, 12, 0)]
显然,这不是我想要的。 获得整数的另一个想法是简单地将日期转换为秒,然后像之前一样使用timedelta,但看看会发生什么:

date = [datetime(2014,01,01) + timedelta(seconds=dcc[i]*86400) for i in dcc*86400]

请注意使用'秒'在timedelta现在而不是'天'。这给出了以下内容:

IndexError: index 43200 is out of bounds for axis 0 with size 20

我尝试了很多网络搜索,但是没有其他人提出同样的问题,或者我在某处犯了一个大错...

有人可以帮忙吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

正如@Kasramvd所说,你的列表理解是错误的。您已经访问dcc中的项目,因此您不再需要索引。

我明白了:

In [33]: date = [datetime(2014,1,1) + timedelta(days=i) for i in dcc]

In [34]: date
Out[34]:
[datetime.datetime(2014, 1, 1, 0, 0),
 datetime.datetime(2014, 1, 1, 12, 0),
 datetime.datetime(2014, 1, 2, 0, 0),
 datetime.datetime(2014, 1, 2, 12, 0),
 datetime.datetime(2014, 1, 3, 0, 0),
 datetime.datetime(2014, 1, 3, 12, 0),
 datetime.datetime(2014, 1, 4, 0, 0),
 datetime.datetime(2014, 1, 4, 12, 0),
 datetime.datetime(2014, 1, 5, 0, 0),
 datetime.datetime(2014, 1, 5, 12, 0),
 datetime.datetime(2014, 1, 6, 0, 0),
 datetime.datetime(2014, 1, 6, 12, 0),
 datetime.datetime(2014, 1, 7, 0, 0),
 datetime.datetime(2014, 1, 7, 12, 0),
 datetime.datetime(2014, 1, 8, 0, 0),
 datetime.datetime(2014, 1, 8, 12, 0),
 datetime.datetime(2014, 1, 9, 0, 0),
 datetime.datetime(2014, 1, 9, 12, 0),
 datetime.datetime(2014, 1, 10, 0, 0),
 datetime.datetime(2014, 1, 10, 12, 0)]

答案 1 :(得分:-1)

首先尝试制作日期时间,然后添加相应的每个