大数跨境
0
0

and or not全报错?教你query里如何使用“与或非”

and or not全报错?教你query里如何使用“与或非” JoinQuant聚宽
2017-03-03
0
导读:获取财务数据时常常遇到的问题。

想必有些朋友,想获取财务数据,有时需要多个条件筛选,但and or not全报错 ,然后就不会写了。比如这样一道题:

请获取2016年10月15日满足如下条件的股票的股票代码、总市值及其净利润:
总市值大于10000
并且 净利润大于0
或者 股票代码在'000001.XSHE','600000.XSHG'中

这又是并且又是或者,很明显在考察与或非的用法,但是这是一个sqlalchemy.orm.query ,所以 and or not全报错,怎么办呢?

与或非的写法

and or not 都不对,这里与或非该这样写:
 "&" (在键盘数字7上)
 "|" (在键盘回车和后退之间的斜杠上)
 "~" (在键盘tab和esc之间的点上)

每个条件用括号包上,之间用与或非连接

光学会与或非的写法还是会报错怎么办?,你需要正确的条件分隔方式,按之前那个例子就是这样连接:

(总市值大于10000)&~(净利润大于0 )|(股票代码在'000001.XSHE','600000.XSHG'中)

这里括号里的条件我没用代码,此外不用非也是可以的,我只是想把非的写法展示下。不用非写法如下:

(总市值大于10000)&(净利润小于等于0 )|(股票代码在'000001.XSHE','600000.XSHG'中)

特别说明下in_()

股票代码在某个list中不能用in,要用in_(),所以“股票代码在'000001.XSHE','600000.XSHG'中”要写成这样:

valuation.code.in_(['000001.XSHE','600000.XSHG'])

综上,最开始的那道多个筛选条件获取数据的题就是这么解的:

q=query(
        # 市值数据.股票代码
        valuation.code 
        # 市值数据.总市值
        ,valuation.market_cap 
        # 利润数据.净利润
        ,income.net_profit 
        # 筛选 总市值大于500 并且 净利润不大于0 或者 股票代码属于'000001.XSHE','600000.XSHG'中
        ).filter( (valuation.market_cap > 500) 
            &~ (income.net_profit > 0)
            |(valuation.code.in_(['000001.XSHE','600000.XSHG']))
        )
df=get_fundamentals(q, date='2016-10-15')
df

研究中运行输出结果:


点击『阅读原文』,到JoinQuant社区查看。


长按指纹,关注JoinQuant

【声明】内容源于网络
0
0
JoinQuant聚宽
JoinQuant(聚宽)量化交易平台官方账号
内容 249
粉丝 0
JoinQuant聚宽 JoinQuant(聚宽)量化交易平台官方账号
总阅读302
粉丝0
内容249