【问题标题】:Retain KDB Long Epoch Time When Importing Into Pandas导入 Pandas 时保留 KDB Long Epoch Time
【发布时间】:2017-03-13 15:34:52
【问题描述】:

我有来自 KDB 的纪元时间,例如530782044475144833。但是我在 Pandas 中使用过的任何数据类型,例如int, float64 严格四舍五入到 5.31e+17,使其无用。读入 Pandas 时,如何保留整个 KDB 纪元时间?提前致谢。

【问题讨论】:

  • 一种解决方案可能是只存储与基线的偏移量,而不是整个纪元时间。
  • 你试过np.int64吗?
  • @chrisaycock -- 谢谢克里斯。使用 np.int64 返回“TypeError:数据类型“np.int64”不理解”。仅使用 int64 会返回“ValueError:int() 的无效文字,基数为 10:b'5.31E+17'”。
  • 谢谢 Joao -- 这似乎是一个可行的解决方法。
  • @skafetaur 我假设“TypeError:数据类型“np.int64”不理解”来自您使用的任何 KDB 适配器。适配器本身需要能够正确转换j 类型。

标签: python pandas kdb epoch pyq


【解决方案1】:

PyQ 的最新 (> 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

生成的数组可以转换成熊猫的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2018-01-31
    • 2013-01-16
    • 2016-08-08
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多