Mel*_*nie 26 python datetime numpy timedelta
我有一些输入数据,输入文件中的时间戳是从文件名中指定的日期时间开始的小时数.
这有点无用,所以我需要将它转换为python datetime.datetime对象,然后将它放在一个numpy数组中.我可以写一个for循环,但我想做的事情如下:
numpy.arange(datetime.datetime(2000, 1,1), datetime.datetime(2000, 1,2), datetime.timedelta(hours=1))
Run Code Online (Sandbox Code Playgroud)
这会引发TypeError.
可以这样做吗?我坚持使用python 2.6和numpy 1.6.1.
小智 23
from datetime import datetime, timedelta
t = np.arange(datetime(1985,7,1), datetime(2015,7,1), timedelta(days=1)).astype(datetime)
Run Code Online (Sandbox Code Playgroud)
这里的关键是使用astype(datetime),否则结果将是datetime64.
nne*_*neo 14
请参阅NumPy Datetimes和Timedeltas.基本上,您可以使用numpy.datetime64类型在NumPy中表示日期时间,这允许您执行值范围.
对于NumPy 1.6,其datetime64类型不太有用,您可以使用合适的列表推导来构建日期时间(另请参阅在Python中创建一系列日期):
base = datetime.datetime(2000, 1, 1)
arr = numpy.array([base + datetime.timedelta(hours=i) for i in xrange(24)])
Run Code Online (Sandbox Code Playgroud)
这产生了
array([2000-01-01 00:00:00, 2000-01-01 01:00:00, 2000-01-01 02:00:00,
2000-01-01 03:00:00, 2000-01-01 04:00:00, 2000-01-01 05:00:00,
2000-01-01 06:00:00, 2000-01-01 07:00:00, 2000-01-01 08:00:00,
2000-01-01 09:00:00, 2000-01-01 10:00:00, 2000-01-01 11:00:00,
2000-01-01 12:00:00, 2000-01-01 13:00:00, 2000-01-01 14:00:00,
2000-01-01 15:00:00, 2000-01-01 16:00:00, 2000-01-01 17:00:00,
2000-01-01 18:00:00, 2000-01-01 19:00:00, 2000-01-01 20:00:00,
2000-01-01 21:00:00, 2000-01-01 22:00:00, 2000-01-01 23:00:00], dtype=object)
Run Code Online (Sandbox Code Playgroud)
Joh*_*nck 12
使用现代NumPy,您可以这样做:
np.arange(np.datetime64('2017-01-01'), np.datetime64('2017-01-08'))
Run Code Online (Sandbox Code Playgroud)
它给你:
array(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07'], dtype='datetime64[D]')
Run Code Online (Sandbox Code Playgroud)
请注意,@ nneonneo解决方案可以简化
result = first_date + np.arange(24) * datetime.timedelta(hours=1)
Run Code Online (Sandbox Code Playgroud)
感谢NumPy数组操作.然后result阵列有一个dtype=object.
对于更复杂的范围,您可能对scikits.timeseries包(不再维护)或更好的
pandas包,重新实现的大多数想法感兴趣scikits.timeseries.两个软件包都支持旧版本的NumPy(1.5,1.6 ...)
如另一个答案中所述,对于Numpy> 1.7,您可以使用Numpy的内置日期时间功能.Numpy文档中的示例不包括使用np.arange步骤,所以这里是一个:
timearray = np.arange('2000-01-01', '2000-01-02',np.timedelta64(1,'h'), dtype='datetime64')
Numpy将此结果的dtype设置为datetime64[h].您可以将其明确设置为较小的时间单位dtype='datetime64[m]'.
在1.8.1版本中(我之前预期),尝试向该结果数组添加小于一小时的偏移量将不起作用.
timearray += np.timedelta64(10,'s') 不会改变 timearraytimearray2 = timearray + np.timedelta64(10,'s')将添加10秒timearray并将dtype转换timearray2为datetime64[s]| 归档时间: |
|
| 查看次数: |
43081 次 |
| 最近记录: |