Pytables NumExpr ValueError: слишком много входных данных при запросе с большим количеством условий

Я сталкиваюсь с этой ошибкой при запросе таблицы 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?


person smartexpert    schedule 25.08.2013    source источник
comment
У меня есть только одно условие в моих запросах, и я все равно получаю ту же ошибку.   -  person S.V    schedule 01.07.2021


Ответы (2)


Если вы используете pandas.DataFrame.query, вы можете попробовать изменить engine='python' в **kwargs.

person Alexander Myasnikov    schedule 03.08.2018

Я задал тот же вопрос ребятам из Pytable на GitHub. (По совпадению, у меня также было 50 условий, переведенных из предложения SQL IN.) Они были очень приятными и быстро реагировали. Это тупая проблема:

Это ограничение numexpr, основанное на значении NPY_MAXARGS, которое определено в numpy. Обновление до numpy v1.8 может решить проблему. См. numpy/numpy#226 и [1]. ...
...
Да, кстати, ограничение NPY_MAXARGS=32

Какую версию numpy вы используете? numpy 1.8 в порядке.

РЕДАКТИРОВАТЬ: На самом деле это не работает и на numpy 1.8. У них все еще NPY_MAXARGS=32

person dionysus    schedule 08.10.2013