无法访问pandas DataFrame中的所有列,其中使用qPython

时间:2017-07-20 06:48:56

标签: python pandas dataframe kdb

我使用qPython库将数据从Kdb +中的键控表导入到pandas DataFrame中。如果我运行同步查询

    x=q.sync('select from prod where ID=9 ') 

然后x的类型为qpython.qcollection.QKeyedTable。但是如果我使numpy_temporals=true返回类型是pandas DataFrame。

    from qpython import qconnection
    with qconnection.QConnection(host = 'localhost', port = 5000) as q:
    query = 'select from table where ID=5'
    x=q.sync(query, numpy_temporals = True)
    print x.iloc[0:3,0:3]
    print x.columns.values

x.iloc [0:1,0:1]返回

EMP_ID   PROD_ID   month   total   x 
01        02       jan-17    5.5   6

x.columns.values返回

['month' 'total' 'x']

数据来自键控表,DataFrame无法访问主键字段。该表有5个字段,但返回的数据框只显示3.我无法访问前两列。

我查看了以下stackoverflow问题Not able to view all columns in Pandas Data framePython pandas, how to widen output display to see more columns?,但它们无法解决问题。

此外,我想将DataFrame中的数据读入类Employee,以便为每个员工创建一个特征向量。我不希望数据存储在DataFrame中,因为某些功能将是多值的,如organization(员工可能在多个组织中兼职工作)。

我是正确地做了还是有更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您正在查看键控表 - 转换为pandas DataFrame使键成为表的索引 -

Q流程

q)\p 5000
q)t:([a:til 10;b:reverse til 10]c:10?`3;d:10?10i)

Python进程

> import pandas as pd
> import numpy as np
> from qpython.qconnection import QConnection as qc
> q = qc('localhost', 5000)
> q.open()
> x = q.sync('select from t', pandas=True)
> x.columns.values
array(['c', 'd'], dtype=object)
> x.index
MultiIndex(levels=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],
       labels=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]],
       names=[u'a', u'b'])

如果您希望将所有列视为标准DataFrame,没有索引(标准i-indexing除外),请将查询修改为

> x = q.sync('0!select from t', pandas=True) 

请注意0!执行的不干预。

> x.columns.values
array(['a', 'b', 'c', 'd'], dtype=object)

值得阅读qpython documentation,因为它确实涵盖了这一点。