我有一个np数组如下:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<img class="toggle" id="image" src="https://i.imgur.com/uLlPUfM.png"/>
第一列是Timestamp类型值。 如何将这些值转换为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)
转换单个值的时间戳,但是如何在所有时间戳上同时执行此操作?理想情况下像example[0,0].to_datetime()
...
答案 0 :(得分:3)
如果我将Timestamp
定义为numpy
日期时间dtype:
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)
请注意,此数组为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)
Timestamp对象的迭代转换
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)
答案 1 :(得分:1)
Helo,试试:
example[:,0]= map(lambda x: x.to_datetime(), example[:,0])
答案 2 :(得分:0)
这很简单:
t = np.datetime64('2018-08-18 23:25')
- &gt; numpy.datetime64('2018-06-18T23:31')
t.\_\_str\_\_()
- &gt; '2018-06-18T23:31'
t.tolist()
- &gt; datetime.datetime(2018, 6, 18, 23, 31)
这就是你所需要的一切。