首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPython Pandas交互

QPython Pandas交互
EN

Stack Overflow用户
提问于 2018-09-06 04:13:19
回答 1查看 2K关注 0票数 1

我有一个关于熊猫数据帧的问题,我想用滴答源(kdb表)中的时间来丰富它。

代码语言:javascript
复制
Pandas DataFrame
Date         sym   Level
2018-07-01   USDJPY    110
2018-08-01   GBPUSD    1.20

我想要用计时来丰富这个数据框架(对于给定的货币对,当水平被跨越时,第一次是在给定的日期)。

代码语言:javascript
复制
from qpython import qconnection
from qpython import MetaData
from qpython.qtype import QKEYED_TABLE
from qpython.qtype import QSTRING_LIST, QINT_LIST, 
QDATETIME_LIST,QSYMBOL_LIST
q.open()
df.meta = MetaData(sym = QSYMBOL_LIST, val = QINT_LIST, Date = 
QDATE_LIST)
q('set', np.string_('tbl'), df)

上面的代码将pandas数据帧转换为Q表。

访问节拍数据的示例代码(kdb表)

代码语言:javascript
复制
select Mid by sym,date from quotestackevent where date = 2018.07.01, sym = `CCYPAIR

如何通过Qpython使用dataframe列sym和date从kdb表中拉取数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-08 19:34:00

假设在KDB+端有一个表t,其中包含列sym (类型为symbol)、date (类型为date)和mid (类型为float),例如由以下代码生成:

代码语言:javascript
复制
t:`date xasc ([] sym:raze (3#) each `USDJPY`GBPUSD`EURBTC;date:9#.z.d-til 3;mid:9?`float$10)

然后,要将数据从KDB+端丰富到Python端,您可以执行以下操作:

代码语言:javascript
复制
from qpython import qconnection
import pandas as pd

df = pd.DataFrame({'Date': ['2018-09-08','2018-09-08','2018-09-07','2018-09-07'],'sym':['abc','def','abc','def']})
df['Date']=df['Date'].astype('datetime64[ns]')

with qconnection.QConnection(host = 'localhost', port = 5001, pandas = True) as q:
    X = q.sync('{select sym,date,mid from t where date in `date$x}',df['Date'])

这里,q.sync()的第一个参数定义了要执行的函数,第二个参数是您想要从表t中获取的日期范围。在函数内部,` `date$x部分将参数转换为日期列表,这是必需的,因为df‘`date’是作为时间戳列表发送到KDB+端的。

生成的X数据框将具有二进制字符串形式的sym列,因此您可能希望执行以下操作

代码语言:javascript
复制
X['sym'].apply(lambda x: x.decode('ascii'))

将其转换为字符串。

发送函数定义的另一种方法是在Python端定义一个函数,并且只从KDB+端发送它的名称。所以,如果你能做一些像这样的事情

代码语言:javascript
复制
getMids:{select sym,date,mid from t where date in `date$x}

在KDB+端,您可以这样做

代码语言:javascript
复制
X = q.sync('getMids',df['Date'])

而不是发送函数定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52192784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档