2

我在使用 where 方法传递具有 50 个条件的字符串查询 pytables 表时遇到此错误。这些条件基本上是 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 的条件数量是否存在已知限制?

4

2 回答 2

3

如果您使用pandas.DataFrame.query,那么您可以尝试更改engine='python'**kwargs。

于 2018-08-03T06:47:42.983 回答
2

我向 GitHub 上的 Pytable 人员提出了同样的问题。(巧合的是,我还从 SQL IN 子句翻译了 50 个条件。)它们的响应速度非常快。这是一个麻木的问题:

这是 numexpr 的限制,基于 numpy 中定义的 NPY_MAXARGS 值。升级到 numpy v1.8 可能会解决此问题。请参阅 numpy/numpy#226[1]. ...
...
哦,顺便说一句,限制是NPY_MAXARGS=32

你用什么 numpy 版本?numpy 1.8 可以。

编辑:实际上它也不适用于 numpy 1.8。他们仍然有 NPY_MAXARGS=32

于 2013-10-08T03:43:53.337 回答