蟒numpy的 - 转换时间戳来DATETIME
我有一个NP阵列,例如如下:蟒numpy的 - 转换时间戳来DATETIME
example = np.array([[Timestamp('2005-03-06 17:00:00'), 1225.75, 1226.25, 1225.0, 1225.5,
1668.0],
[Timestamp('2005-03-06 17:30:00'), 1225.75, 1227.5, 1225.75, 1227.0,
1603.0],
[Timestamp('2005-03-06 18:00:00'), 1227.0, 1227.5, 1226.75, 1227.25,
590.0]], dtype=object)
的第一列是一个时间戳类型值。 如何将这些值转换为datetime? 我知道这个话题很少有类似的问题,但我无法形成一个清晰的理解,并找出一个干净整洁的解决方案基于它们。
我可以将单个值的时间戳与example[0,0].to_datetime()
进行转换,但是如何在所有时间戳上同时执行此操作?非常像example[:,0].
...
如果我定义Timestamp
作为numpy
日期时间D型:
In [43]: Timestamp=np.datetime64
然后我可以复制正粘贴example
:
In [44]: example = np.array([[Timestamp('2005-03-06 17:00:00'), 1225.75, 1226.25 , 1225.0, 1225.5, 1668.0],
...: [Timestamp('2005-03-06 17:30:00'), 1225.75, 1227.5, 1225.75, 1227.0, 1603.0],
...: [Timestamp('2005-03-06 18:00:00'), 1227.0, 1227.5, 1226.75, 1227.25, 590.0]], dtype=object)
请注意,此ar射线dtype
object
In [45]: example
Out[45]:
array([[numpy.datetime64('2005-03-06T17:00:00'), 1225.75, 1226.25, 1225.0,1225.5, 1668.0],
[numpy.datetime64('2005-03-06T17:30:00'), 1225.75, 1227.5, 1225.75, 1227.0, 1603.0],
[numpy.datetime64('2005-03-06T18:00:00'), 1227.0, 1227.5, 1226.75, 1227.25, 590.0]], dtype=object)
的第一列是:
In [46]: example[:,0]
Out[46]:
array([numpy.datetime64('2005-03-06T17:00:00'),
numpy.datetime64('2005-03-06T17:30:00'),
numpy.datetime64('2005-03-06T18:00:00')], dtype=object)
可被转化到datetime64
元件的阵列:
In [47]: example[:,0].astype(np.datetime64)
Out[47]: array(['2005-03-06T17:00:00', '2005-03-06T17:30:00', '2005-03-06T18:00:00'], dtype='datetime64[s]')
tolist
对于这种类型的阵列的转换元件到datetime
对象:
In [48]: example[:,0].astype(np.datetime64).tolist()
Out[48]:
[datetime.datetime(2005, 3, 6, 17, 0),
datetime.datetime(2005, 3, 6, 17, 30),
datetime.datetime(2005, 3, 6, 18, 0)]
另外,掠的pandas.Timestamp
功能
In [50]: Timestamp = pd.Timestamp
In [52]: example
Out[52]:
array([[Timestamp('2005-03-06 17:00:00'), 1225.75, 1226.25, 1225.0, 1225.5, 1668.0],
[Timestamp('2005-03-06 17:30:00'), 1225.75, 1227.5, 1225.75, 1227.0, 1603.0],
[Timestamp('2005-03-06 18:00:00'), 1227.0, 1227.5, 1226.75, 1227.25, 590.0]], dtype=object)
In [64]: ts = example[:,0]
In [65]: ts
Out[65]:
array([Timestamp('2005-03-06 17:00:00'), Timestamp('2005-03-06 17:30:00'), Timestamp('2005-03-06 18:00:00')], dtype=object)
时间戳的迭代转换对象
In [67]: np.array([t.to_datetime() for t in ts])
Out[67]:
array([datetime.datetime(2005, 3, 6, 17, 0),
datetime.datetime(2005, 3, 6, 17, 30),
datetime.datetime(2005, 3, 6, 18, 0)], dtype=object)
但我发现,astype
作品与Timestamp
对象:
In [73]: ts = example[:,0]
In [74]: ts.astype('datetime64[s]')
Out[74]: array(['2005-03-06T17:00:00', '2005-03-06T17:30:00', '2005-03-06T18:00:00'], dtype='datetime64[s]')
,所以我可以使用tolist
做转换在一个行:
In [75]: ts.astype('datetime64[s]').tolist()
Out[75]:
[datetime.datetime(2005, 3, 6, 17, 0),
datetime.datetime(2005, 3, 6, 17, 30),
datetime.datetime(2005, 3, 6, 18, 0)]
我不会形容这是一个最终的解决方案,但它给你的使用日期如何numpy
交易的想法。
对于数组数学,我会坚持使用datetime64
dtype。要保留在一个阵列中以及浮点数example[:,1:]
必须使用结构化数组。
=================
与副本进行实验:
In [80]: ex1 = example.copy()
In [82]: ex1[:,0] = example[:,0].astype('datetime64[s]').tolist()
In [83]: ex1
Out[83]:
array([[datetime.datetime(2005, 3, 6, 17, 0), 1225.75, 1226.25, 1225.0, 1225.5, 1668.0],
[datetime.datetime(2005, 3, 6, 17, 30), 1225.75, 1227.5, 1225.75, 1227.0, 1603.0],
[datetime.datetime(2005, 3, 6, 18, 0), 1227.0, 1227.5, 1226.75, 1227.25, 590.0]],
dtype=object)
嗨thx,这是非常有用的和解释性的。你会有一个提示,以便在原始数组中将时间戳转换为datetime *按照您的示例,我剩下一个数组只包含时间戳我知道我的建议,但最终目标当然是拥有这个简单的时间序列(即原始“示例”),其时间戳已经转换了,我必须这样做的原因是matplotlib plot。 –
Looks就像我可以复制这些'tolist()'结果一样回到原始数组中。由于'dtype'是对象,它不关心元素是否改变类型。 – hpaulj
直升机,尝试:
example[:,0]= map(lambda x: x.to_datetime(), example[:,0])
我喜欢这种语法,因为'to_datetime'使得它非常清楚发生了什么。但是,在使用你的线时,变量示例中包含以下内容:'array([[,1207.5,1209.75,1207.25,1209.0, 7659.0],'你可以看到有一个''地图对象''应该有一个'datetime.datetime'对不起,我还不熟悉熊猫等等。但是我错过了什么吗? –
哦,我看到你在使用python 3吗?尝试在map之前添加一个列表:'list (map(...))' – plumSemPy
在你的''example'没有定义Timestamp'。你能澄清吗? –
我的意思是我想将'Timestamp('2005-03-06 18:00:00')'这样的值转换为诸如'datetime.datetime(2005,3,6,17,0)这样的值' 。 –
我认为@ JoeT.Boka问的是“你从哪里得到'Timestamp'类?”,如果我错了,请纠正我。 – Dekel