我有一个datetimes数组,需要将其转换为datetimes列表.我的数组如下所示:

import numpy as np

my_array = np.array(['2017-06-28T22:47:51.213500000', '2017-06-28T22:48:37.570900000',
                     '2017-06-28T22:49:46.736800000', '2017-06-28T22:50:41.866800000',
                     '2017-06-28T22:51:17.024100000', '2017-06-28T22:51:24.038300000'], dtype='datetime64[ns]')

my_list = my_array.tolist()

我需要一个日期时间值列表,但当我设置为my_array.tolist()时,我会得到一个数字时间戳列表:

[1498690071213500000,
 1498690117570900000,
 1498690186736800000,
 1498690241866800000,
 1498690277024100000,
 1498690284038300000]

我的问题是how do I preserve the datetime format when going from an array to a list,还是how do I convert the list of time stamps to a list datetime values

推荐答案

numpy.ndarray显式转换为本机Python list将把内容保留为numpy.datetime64个对象:

>>> list(my_array)
[numpy.datetime64('2017-06-28T22:47:51.213500000'),
 numpy.datetime64('2017-06-28T22:48:37.570900000'),
 numpy.datetime64('2017-06-28T22:49:46.736800000'),
 numpy.datetime64('2017-06-28T22:50:41.866800000'),
 numpy.datetime64('2017-06-28T22:51:17.024100000'),
 numpy.datetime64('2017-06-28T22:51:24.038300000')]

但是,如果您想从整数时间戳返回到numpy.datetime64对象,这里numpy.ndarray.tolist给出的数字是纳秒格式的,因此您也可以使用如下列表理解:

>>> [np.datetime64(x, "ns") for x in my_list]
[numpy.datetime64('2017-06-28T22:47:51.213500000'),
 numpy.datetime64('2017-06-28T22:48:37.570900000'),
 numpy.datetime64('2017-06-28T22:49:46.736800000'),
 numpy.datetime64('2017-06-28T22:50:41.866800000'),
 numpy.datetime64('2017-06-28T22:51:17.024100000'),
 numpy.datetime64('2017-06-28T22:51:24.038300000')]

如果希望最终结果是Python datetime.datetime对象,而不是numpy.datetime64对象,you can use a method like this(根据位置需要进行调整):

>>> from datetime import datetime
>>> list(map(datetime.utcfromtimestamp, my_array.astype(np.uint64) / 1e9))
[datetime.datetime(2017, 6, 28, 22, 47, 51, 213500),
 datetime.datetime(2017, 6, 28, 22, 48, 37, 570900),
 datetime.datetime(2017, 6, 28, 22, 49, 46, 736800),
 datetime.datetime(2017, 6, 28, 22, 50, 41, 866800),
 datetime.datetime(2017, 6, 28, 22, 51, 17, 24100),
 datetime.datetime(2017, 6, 28, 22, 51, 24, 38300)]

Edit: Warren Weckesser's answer提供了一种从numpy.datetime64[ns]数组到Python datetime.datetime对象列表的更直接的方法,这比这里描述的更简单.

Python相关问答推荐

从流程获取定期更新

在Python中添加期货之间的延迟

如何匹配3D圆柱体的轴和半径?

如何使用PyTest根据self 模拟具有副作用的属性

如何在矩阵上并行化简单循环?

PyQt5如何将pyuic 5生成的Python类添加到QStackedWidget中?

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

分组数据并删除重复数据

使用LineConnection动画1D数据

Pandas 第二小值有条件

将整组数组拆分为最小值与最大值之和的子数组

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

Pandas DataFrame中行之间的差异

迭代嵌套字典的值

如何在Python中找到线性依赖mod 2

如何创建引用列表并分配值的Systemrame列

在Admin中显示从ManyToMany通过模型的筛选结果