Pytables NumExpr ValueError:在查询很多条件时输入太多

时间:2013-08-25 18:29:51

标签: python pytables numexpr

在查询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的条件数限制?

2 个答案:

答案 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'