Как преобразовать дату и время из ответа на запрос сервера kdb, используя q Python и pandas? - PullRequest
0 голосов
/ 17 февраля 2020

У меня проблема с преобразованием даты и времени в ответе сервера kdb.

Я искал в Inte rnet и здесь, в StackOverflow, но не смог найти подходящего решения. Поэтому мне нужна помощь.

from qpython import qconnection
import pandas as pd
from datetime import datetime


query = 'select from trade where date = 2007.02.28, sym = `XXXX'


q = qconnection.QConnection(host=server, port=server_port, username=user, password=server_password, timeout=server_timeout)

q.open()

df = pd.DataFrame(q.sendSync(query))
print(df.to_string())

q.close()

Ответ (только строка заголовка и первая строка):

      date            time    ex      sym     cond     size          price  stop  corr      seq   src  trpt     participantTime1  rrn     participantTime2   id  exempt
0       2615  15517877000000  b'P'  b'XXXX'  b'T   '      500      27.670000  b' '     0     1095  b'N'  b' ' -9223372036854775808  b'' -9223372036854775808  b''  -32768

Как преобразовать дату и время? Прямо сейчас у меня есть 2615 для даты , которая должна быть 2007.02.28. То же самое касается времени . Это 15517877000000, а 0D04: 18: 37.877000000. (Скорее всего, 0D по времени происходит из-за кодирования - проблема, которую я решу позже, если потребуется.). То же самое относится к memberTime1 и memberTime2

Заранее благодарим вас за чье-либо время.

1 Ответ

2 голосов
/ 17 февраля 2020

Pandas интеграция и автоматизация c Временное приведение типов поддерживается пакетом q Python, который упростит вашу проблему. Вы можете найти соответствующую документацию здесь .

Единственное изменение, которое вам нужно будет сделать из своего фрагмента кода, это установить флаг pandas в True при создании экземпляра QConnection object:

q = qconnection.QConnection(host=server, port=server_port, username=user,
  password=server_password, timeout=server_timeout, pandas=True)

В этом случае вам также не нужно преобразовывать возвращаемое значение из sendSync, поскольку q таблиц теперь будут представлены в виде pandas данных по умолчанию:

df = q.sendSync(query)
...