导入熊猫时保留KDB长纪元时间

时间:2016-10-31 14:21:41

标签: pandas epoch kdb pyq

我有KDB的纪元时间,例如的 530782044475144833 即可。但我在Pandas中使用的任何数据类型,例如int,float64严重地将其四舍五入到 5.31e + 17 ,使其无用。阅读大熊猫时,如何保留KDB纪元时间的整个长度?提前谢谢。

1 个答案:

答案 0 :(得分:1)

在最近的(> 4.0)版本的PyQ中,kdb +时间戳向量可以很容易地转换为numpy数组。例如:

>>> p = q('2#.z.P')
>>> p
k('2017.07.05D13:37:41.058130000 2017.07.05D13:37:41.058130000')
>>> p.long
k('552577061058130000 552577061058130000')
>>> a = np.array(p)
>>> a
array(['2017-07-05T13:37:41.058130000', '2017-07-05T13:37:41.058130000'], dtype='datetime64[ns]')

这会进行自动纪元转换,并且不会失去任何精度

>>> p == a
True

生成的数组可以投射到熊猫DatetimeIndex

>>> pd.DatetimeIndex(a)
DatetimeIndex(['2017-07-05 13:37:41.058130', '2017-07-05 13:37:41.058130'], dtype='datetime64[ns]', freq=None)

或置于DataFrame

>>> pd.DataFrame({'timestamp':a})
                   timestamp
0 2017-07-05 13:37:41.058130
1 2017-07-05 13:37:41.058130