首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python numpy -将时间戳转换为日期时间

python numpy -将时间戳转换为日期时间
EN

Stack Overflow用户
提问于 2017-01-01 09:41:36
回答 3查看 10.3K关注 0票数 3

我有一个np数组,如下:

代码语言:javascript
复制
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)

第一列是Timestamp类型值。如何将这些值转换为日期时间?我知道在这个话题上很少有类似的问题,但我无法对它形成一个清晰的理解,并在它们的基础上找出一个干净整洁的解决方案。

我可以用example[0,0].to_datetime()转换单个值的时间戳,但是如何一次转换所有时间戳呢?理想情况下,像example[:,0].这样的东西...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-01 10:43:49

如果我将Timestamp定义为numpy datetime数据类型:

代码语言:javascript
复制
In [43]: Timestamp=np.datetime64

然后我可以复制-n-粘贴你的example

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

第一列是:

代码语言:javascript
复制
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元素的数组:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
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函数

代码语言:javascript
复制
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)

时间戳对象的迭代转换

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
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在一行中完成转换:

代码语言:javascript
复制
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:]浮点数一起保存在一个数组中,您必须使用结构化数组。

=================

使用副本进行实验:

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2017-01-01 10:40:54

Helo,试一下:

代码语言:javascript
复制
example[:,0]= map(lambda x: x.to_datetime(), example[:,0])
票数 1
EN

Stack Overflow用户

发布于 2018-06-19 05:28:42

这很简单:

t = np.datetime64('2018-08-18 23:25') --> numpy.datetime64('2018-06-18T23:31')

t.\_\_str\_\_() --> '2018-06-18T23:31'

t.tolist() --> datetime.datetime(2018, 6, 18, 23, 31)

这就是你所需要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41412815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档