首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyQ -将数据类型转换为空表

PyQ -将数据类型转换为空表
EN

Stack Overflow用户
提问于 2017-12-14 00:41:14
回答 2查看 230关注 0票数 2

在PyQ中,我可以创建一个字典,并使用翻转来转置它来获得一个表……

代码语言:javascript
运行
复制
q.set(':alpha', q('!', ["Name", "Ask", "Bid", "Time"], ()).flip)

然而,不出所料,当我在Q中加载它并检索元数据时,它将所有列的char类型显示为符号……

代码语言:javascript
运行
复制
>>> q.get(':alpha').show()
Name  Ask              Bid            Time
---------------------------------------------------------------
"BTC" "16351.0"        "16350.0"      "2017-12-12T17:32:33.09"
"ETH" "589.89999993"   "585.25"       "2017-12-12T17:32:32.697"
"LTC" "297.0"          "296.29570358" "2017-12-12T17:32:32.353"
"BTC" "16355.0"        "16351.0"      "2017-12-12T17:32:44.777"
"ETH" "589.89999993"   "585.25"       "2017-12-12T17:32:42.15"
"LTC" "297.99940398"   "296.29570359" "2017-12-12T17:32:44.433"
"BTC" "16359.99999998" "16350.0"      "2017-12-12T17:32:53.713"
"ETH" "589.89999993"   "585.2500001"  "2017-12-12T17:32:53.197"
"LTC" "297.99940398"   "295.0"        "2017-12-12T17:32:51.37"
"BTC" "16355.0"        "16350.0"      "2017-12-12T17:33:02.433"
"ETH" "585.2500001"    "585.25"       "2017-12-12T17:33:03.497"
"LTC" "297.99940397"   "295.0"        "2017-12-12T17:33:01.463"
>>> q()
q)\l alpha
`alpha
q)meta alpha
c   | t f a
----| -----
Name| s
Ask | s
Bid | s
Time| s
q)

我认为这就是当我执行以下查询时,控制台抛出'type错误的原因……

代码语言:javascript
运行
复制
q)select Name, max Ask, max Bid, Time from alpha
'type
q)select max Ask, max Bid, Time by Name from alpha
'type
q)select from alpha where Bid=(max;Bid) fby Name
'type
q)select from alpha where Name=`BTC
Name Ask Bid Time
-----------------

我知道在Q中,我可以发出以下命令来实现这一点……

代码语言:javascript
运行
复制
q)alpha:([]Name:`symbol$(); Ask:`float$(); Bid:`float$(); Time:`datetime$())
q)meta alpha
c   | t f a
----| -----
Name| s
Ask | f
Bid | f
Time| z
q)

为PyQ中的每一列定义字符类型的正确语法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-16 23:54:44

我将一个datetime char类型传递给一个timestamp列。在Q中,我会将这些定义为...

代码语言:javascript
运行
复制
q)table:([]date:`datetime$(); name:`symbol$())
q)meta table
c   | t f a
----| -----
date| z
name| s

q)table:([]date:`timestamp$(); name:`symbol$())
q)meta table
c   | t f a
----| -----
date| p
name| s

我可以通过将datetime解析为时间戳并转换为K.timestamp([])来解决此问题……

下面的代码...

代码语言:javascript
运行
复制
from bittrex.bittrex import Bittrex, API_V2_0
from datetime import datetime
import time
from pyq import q, K

get_bittrex = Bittrex(None, None)
starttime = time.time()

q.load(':alpha')

while True:
    market_result = get_bittrex.get_market_summaries()['result']
    for res in market_result:
        market_name = res['MarketName']
        ask = float(res['Ask'])
        bid = float(res['Bid'])
        last = float(res['Last'])
        volume = float(res['Volume'])
        dt = res['TimeStamp']
        if market_name in ['USDT-BTC', 'USDT-ETH', 'USDT-LTC', 'USDT-XRP', 'USDT-NEO', 'USDT-BCC', 'USDT-ZEC', 'USDT-XMR', 'USDT-DASH']:
            ts = datetime.strptime(dt, '%Y-%m-%dT%H:%M:%S.%f')
            data = [market_name[5:], ask, bid, last, volume, ts]
            q.upsert(':alpha', [data])
            q.get(':alpha').show()
    time.sleep(60.0)

现在在我的表中返回正确的字符类型...

代码语言:javascript
运行
复制
q)meta alpha
c   | t f a
----| -----
Name| s
Ask | f
Bid | f
Last| f
Vol | f
Time| p
票数 0
EN

Stack Overflow用户

发布于 2017-12-14 01:37:20

您也可以在PyQ中指定类型:

代码语言:javascript
运行
复制
>>> from pyq import K
>>> q('!', ["Name", "Ask", "Bid", "Time"], [K.symbol([]), K.float([]), K.float([]), K.timestampt([])]).flip.meta.show()
c   | t f a
----| -----
Name| s
Ask | f
Bid | f
Time| p

或者在您的示例中,您可以使用类似以下内容:

代码语言:javascript
运行
复制
>>> q('!', ["Name", "Ask", "Bid", "Time"], [K.symbol(["LTC-USD","BTC-USD"]), 
... K.float([310.,16700.]), 
... K.float([310.01,16700.92]), 
... K.timestamp([datetime.datetime(2017,12,13,17,40,44), datetime.datetime(2017,12,13,17,40,45)])]).flip.show()
Name    Ask   Bid      Time
----------------------------------------------------
LTC-USD 310   310.01   2017.12.13D17:40:44.000000000
BTC-USD 16700 16700.92 2017.12.13D17:40:45.000000000

上面的例子可以进一步简化,因为PyQ知道如何将Python类型转换为Q类型。

代码语言:javascript
运行
复制
>>> q('!', ["Name", "Ask", "Bid", "Time"], [["LTC-USD","BTC-USD"], [310.,16700.], [310.01,16700.92], 
... [datetime.datetime(2017,12,13,17,40,44), datetime.datetime(2017,12,13,17,40,45)]]).flip.meta.show()
c   | t f a
----| -----
Name| s
Ask | f
Bid | f
Time| p

您可以在PyQ的用户指南的Constructs and casts部分中阅读更多内容。

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

https://stackoverflow.com/questions/47798172

复制
相关文章

相似问题

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