我有来自 KDB 的纪元时间,例如530782044475144833。但是我在 Pandas 中使用过的任何数据类型,例如 int、float64 都严格将其四舍五入到5.31e+17,使其毫无用处。读入 Pandas 时,如何保留整个 KDB 纪元时间?提前致谢。
问问题
236 次
1 回答
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
于 2017-07-05T17:49:49.653 回答