繁体   English   中英

如何将int数组转换回pandas时间戳?

[英]How to convert int array back to pandas timestamp?

我能够将pandas timestamp类型的numpy-array列转换为int数组:

import numpy as np
import pandas as pd

df = pd.DataFrame({'a': [pd.datetime(2019, 1, 11, 5, 30, 1), pd.datetime(2019, 1, 11, 5, 30, 1), pd.datetime(2019, 1, 11, 5, 30, 1)], 'b': [np.nan, 5.1, 1.6]})

a = df.to_numpy()
a
# array([[Timestamp('2019-01-11 05:30:01'), nan],
#       [Timestamp('2019-01-11 05:30:01'), 5.1],
#       [Timestamp('2019-01-11 05:30:01'), 1.6]], dtype=object)
a[:,0] = a[:,0].astype('datetime64').astype(np.int64)
# array([[1547184601000000, nan],
#        [1547184601000000, 5.1],
#        [1547184601000000, 1.6]], dtype=object)

对于此数组a,我想将列0转换回熊猫时间戳记。 由于数组很大,而且我的整个过程非常耗时,因此我想避免使用python循环,apply,lambda或类似的东西。 相反,我正在寻找基于速度优化的基于本地numpy的函数等。

我已经尝试过类似的事情:

a[:,0].astype('datetime64')

(结果: ValueError: Converting an integer to a NumPy datetime requires a specified unit

和:

import calendar
calendar.timegm(a[:,0].utctimetuple())

(结果: AttributeError: 'numpy.ndarray' object has no attribute 'utctimetuple'

如何将列a[:,0]

array([[Timestamp('2019-01-11 05:30:01'), nan],
      [Timestamp('2019-01-11 05:30:01'), 5.1],
      [Timestamp('2019-01-11 05:30:01'), 1.6]], dtype=object)

以速度优化的方式?

让我们回顾一下文档

datetime64数据的不变ndarray,内部表示为int64,可以装箱到Timestamp对象中,这些对象是datetime的子类,并携带元数据(例如频率信息)。

因此,我们可以使用DatetimeIndex 然后使用np.int64对其进行np.int64

In [18]: b = a[:,0]                                                             

In [19]: index = pd.DatetimeIndex(b)

In [21]: index.astype(np.int64)                                                 
Out[21]: Int64Index([1547184601000000000, 1547184601000000000, 1547184601000000000], dtype='int64')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM