我正在努力将一个浮点数组(带小数位的数字)转换为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
我尝试了很多网络搜索,但是没有其他人提出同样的问题,或者我在某处犯了一个大错...
有人可以帮忙吗?提前谢谢!
答案 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)
首先尝试制作日期时间,然后添加相应的每个