想必有些朋友,想获取财务数据,有时需要多个条件筛选,但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

