Pytables NumExpr ValueError:使用大量条件进行查询时输入过多



我在使用where方法查询pytables表时遇到了这个错误,该方法传递了一个包含50个条件的字符串。这些条件基本上是SQL IN子句的转换,即我希望获得特定字段等于某个值列表的记录。

C:Python2764libsite-packagesnumexprnecompiler.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的条件数量,是否有已知的限制?

如果使用pandas.DataFrame.query,则可以尝试在**kwargs中更改engine='python'

我在GitHub上向Pytable人员提出了同样的问题。(巧合的是,我还从SQL IN子句中翻译了50个条件。)它们真的很好,响应速度也很快。这是一个棘手的问题:

这是基于NPY_MAXARGS值的numexpr的限制在numpy中定义。升级到numpy v1.8可能会解决此问题。看见numpy/numpy#226和CCD_ 3。…

哦,顺便说一下,限制是NPY_MAXARGS=32

你用的是哪种numpy版本?numpy 1.8可以。

编辑:实际上它在numpy 1.8上也不起作用。它们的NPY_MAXARGS=32仍然是

相关内容

  • 没有找到相关文章

最新更新