在查询pytables表时遇到此错误,其中where方法传递具有50个条件的字符串。这些条件基本上是SQL IN子句的转换,即我想获取特定字段等于某个值列表的记录。
C:\Python2764\lib\site-packages\numexpr\necompiler.pyc in evaluate(ex, local_dict, global_dict, out, order, casting, **kwargs)
744 kwargs = {'out': out, 'order': order, 'casting': casting,
745 'ex_uses_vml': ex_uses_vml}
--> 746 return compiled_ex(*arguments, **kwargs)
ValueError: too many inputs
执行相同查询的另一种方法是什么?我的第一个想法是执行查询50次,每个值一次并合并结果。我希望也许有更优雅的解决方案。
是否已知可以传递给numexpr的条件数限制?
答案 0 :(得分:1)
我在GitHub上向Pytable人问了同样的问题。 (巧合的是,我也有50个条件从SQL IN子句中翻译出来。)他们非常好,反应迅速。这是个尴尬的问题:
这是基于NPY_MAXARGS值的numexpr的限制 在numpy中定义。升级到numpy v1.8可能会解决问题。看到 numpy/numpy#226和
[1]
。 ...
...
哦,顺便说一下,限制是NPY_MAXARGS=32
你使用什么numpy版本? numpy 1.8还可以。
编辑:实际上它也不适用于numpy 1.8。他们还有NPY_MAXARGS = 32答案 1 :(得分:0)
如果您使用pandas.DataFrame.query
,则可以尝试在** kwargs中更改engine='python'
。