Python 导入到熊猫时保留KDB较长时间

Python 导入到熊猫时保留KDB较长时间,python,pandas,kdb,epoch,pyq,Python,Pandas,Kdb,Epoch,Pyq,我有KDB的大纪元时间,例如530782044475144833。但是我在Pandas中使用的任何数据类型,例如int、float64,都会将其四舍五入到5.31e+17,使其变得无用。当我读入熊猫时,如何保持KDB历元时间的整个长度?提前感谢。在的最新(>4.0)版本中,kdb+时间戳向量可以轻松转换为numpy数组。例如: >>> p = q('2#.z.P') >>> p k('2017.07.05D13:37:41.058130000 2017.07.

我有KDB的大纪元时间,例如530782044475144833。但是我在Pandas中使用的任何数据类型,例如int、float64,都会将其四舍五入到5.31e+17,使其变得无用。当我读入熊猫时,如何保持KDB历元时间的整个长度?提前感谢。

在的最新(>4.0)版本中,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
生成的数组可以强制转换到panda的
DatetimeIndex

>>> pd.DatetimeIndex(a)
DatetimeIndex(['2017-07-05 13:37:41.058130', '2017-07-05 13:37:41.058130'], dtype='datetime64[ns]', freq=None)
或放置在
数据框中

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

一种解决方案可能是只存储相对于基线的偏移量,而不是整个历元时间。您是否尝试过
np.int64
?@chrisaycock--谢谢Chris。使用np.int64返回“TypeError:数据类型”np.int64“未理解”。仅使用int64返回“ValueError:invalid literal for int(),以10为基数:b'5.31E+17'”。谢谢Joao——这似乎是一个可行的解决方法。@skafetaur我假设“TypeError:数据类型”np.int64“未理解”来自您正在使用的任何KDB适配器。适配器本身需要能够正确转换
j
类型。