pandas.eval#

pandas.eval(expr, parser='pandas', движок=None, local_dict=None, global_dict=None, резолверы=(), уровень=0, цель=None, inplace=False)[источник]#

Вычислить выражение Python в виде строки с использованием различных бэкендов.

Поддерживаются следующие арифметические операции: +, -, *, /, **, %, // (только для движка python) вместе со следующими логическими операциями: | (или), & (и), и ~ (не). Кроме того, 'pandas' парсер позволяет использовать and, or, и not с той же семантикой, что и соответствующие побитовые операторы. Series и DataFrame объекты поддерживаются и ведут себя так же, как при обычной оценке Python.

Параметры:
exprstr

Выражение для вычисления. Эта строка не может содержать Python утверждения, только Python выражения.

parser{‘pandas’, ‘python’}, по умолчанию ‘pandas’

Парсер для построения синтаксического дерева из выражения. По умолчанию 'pandas' парсит код немного иначе, чем стандартный Python. В качестве альтернативы, вы можете разобрать выражение, используя 'python' парсеру для сохранения строгой семантики Python. См. улучшение производительности документация для более подробной информации.

движок{‘python’, ‘numexpr’}, по умолчанию ‘numexpr’

Движок, используемый для вычисления выражения. Поддерживаемые движки:

  • None : пытается использовать numexpr, возвращается к python

  • 'numexpr' : Этот движок по умолчанию оценивает объекты pandas с использованием numexpr для значительного ускорения сложных выражений с большими фреймами.

  • 'python' : Выполняет операции, как если бы у вас было eval’d в верхнем уровне python. Этот движок обычно не очень полезен.

В будущем могут быть доступны дополнительные бэкенды.

local_dictdict или None, опционально

Словарь локальных переменных, по умолчанию берётся из locals().

global_dictdict или None, опционально

Словарь глобальных переменных, по умолчанию берётся из globals().

резолверысписок dict-подобных объектов или None, опционально

Список объектов, реализующих __getitem__ специальный метод, который вы можете использовать для добавления дополнительной коллекции пространств имён для поиска переменных. Например, это используется в query() метод для внедрения DataFrame.index и DataFrame.columns переменные, которые ссылаются на соответствующие DataFrame атрибуты экземпляра.

уровеньint, необязательный

Количество предыдущих кадров стека для обхода и добавления к текущей области видимости. Большинство пользователей не необходимо изменить этот параметр.

цельобъект, опционально, по умолчанию None

Это целевой объект для присваивания. Он используется при присваивании переменной в выражении. Если так, то цель должен поддерживать присвоение элементов строковыми ключами, и если возвращается копия, она также должна поддерживать .copy().

inplacebool, по умолчанию False

Если цель предоставлено, и выражение изменяет цель, следует ли изменять цель inplace. В противном случае вернуть копию цель с мутацией.

Возвращает:
ndarray, числовой скаляр, DataFrame, Series или None

Значение завершения выполнения данного кода или None, если inplace=True.

Вызывает:
ValueError

Существует множество случаев, когда может возникнуть такая ошибка:

  • target=None, но выражение многострочное.

  • Выражение многострочное, но не все строки содержат присваивание элементов. Пример такого расположения:

    a = b + 1 a + 2

    Здесь есть выражения на разных строках, что делает его многострочным, но последняя строка не имеет переменной, назначенной для вывода a + 2.

  • inplace=True, но в выражении отсутствует присваивание элемента.

  • Присваивание элементов предоставляется, но цель не поддерживает присваивание строковых элементов.

  • Назначение элементов предоставляется и inplace=False, но цель не поддерживает .copy() метод

Смотрите также

DataFrame.query

Вычисляет логическое выражение для запроса к столбцам фрейма.

DataFrame.eval

Вычислить строку, описывающую операции над столбцами DataFrame.

Примечания

The dtype любых объектов, участвующих в арифметической % операции рекурсивно приводятся к float64.

См. улучшение производительности документация для более подробной информации.

Примеры

>>> df = pd.DataFrame({"animal": ["dog", "pig"], "age": [10, 20]})
>>> df
  animal  age
0    dog   10
1    pig   20

Мы можем добавить новый столбец, используя pd.eval:

>>> pd.eval("double_age = df.age * 2", target=df)
  animal  age  double_age
0    dog   10          20
1    pig   20          40