2017-07-20 1 views
0

Ich bin Daten aus einer Keyed-Tabelle in Kdb + zu einem Pandas DataFrame mit qPython-Bibliothek zu importieren. Wenn ich eine synchrone AbfrageZugriff auf alle Spalten in Pandas DataFrame, wo Daten aus kdb + mit qPython importiert werden

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

Dann ist vom Typ qpython.qcollection.QKeyedTable x laufen. Aber wenn ich numpy_temporals=true mache, ist der Rückgabetyp 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] liefert

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

x.columns.values ​​kehrt

['month' 'total' 'x'] 

die Daten von einem getasteten Tabelle ist, die Datenrahmen kann nicht auf die Primärschlüsselfelder zugreifen. Die Tabelle hat 5 Felder, aber der zurückgegebene Datenrahmen zeigt nur 3. Ich kann nicht auf die ersten beiden Spalten zugreifen.

Ich habe die folgenden Stackoverflow-Fragen Not able to view all columns in Pandas Data frame, Python pandas, how to widen output display to see more columns? betrachtet, aber sie lösen das Problem nicht.

Auch ich möchte die Daten aus dem DataFrame in eine Klasse Employee lesen, um einen Merkmalsvektor für jeden Mitarbeiter zu erstellen. Ich möchte nicht, dass die Daten in einem Dataframe gespeichert werden, da bestimmte Funktionen mehrwertig sind wie organization (der Mitarbeiter könnte Teilzeit in mehreren Organisationen arbeiten).

Mache ich es richtig oder gibt es einen besseren Weg, um dieses Problem zu lösen.

Antwort

1

Sie befinden sich in einer Schlüsseltabelle suchen - die Umwandlung in einem Pandas Datenrahmen macht den Schlüssel für die Indizes für die Tabelle -

Q Prozess

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

Python-Prozess

> 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']) 

Wenn Sie alle Ihre Spalten als Standard-Datenframe anzeigen möchten, ohne Indizes (außer Standard-i-Indexierung), ändern Sie Ihre Abfrage auf

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

Beachten Sie die Deaktivierung der 0!.

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

Es lohnt sich, die qpython documentation lesen, wie es dies tut zu decken.

+0

Vielen Dank. Dies hat das Problem gelöst –

Verwandte Themen