我在使用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仍然是