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

标签 python datetime numpy

我有一个 np 数组,如下所示:

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() 转换单个值的时间戳,但如何同时对所有时间戳执行此操作?理想情况下类似于 example[:,0]....

最佳答案

如果我将 Timestamp 定义为 numpy 日期时间数据类型:

In [43]: Timestamp=np.datetime64

然后我可以复制粘贴您的示例:

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)

但我发现 astypeTimestamp 对象一起工作:

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:] float 保存在一个数组中,您必须使用结构化数组。

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

用副本进行实验:

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)

关于python numpy - 将时间戳转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41412815/

相关文章:

python - 如何从cv2 python中的蒙版裁剪区域

python - 使用python提取部分数组元素

python - 在 python 中创建包装类时,如何让父类(super class)的方法返回包装类的实例

javascript - 如何在 javascript 中以 dd/mm/yy 格式格式化 json 日期?

python - 根据值拆分 Numpy 数组

python - ConfigParser 与导入配置

python - pandas datetime 将星期日设置为一周的第一天

sql-server - 数据类型 date 和 datetime 在 add 运算符中不兼容

python - 为什么这些 dtypes 比较相等但散列不同?

python - 对各个像素的 RGB 值迭代函数