[英]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.