pandas.eval
- pandas.eval(expr, parser='pandas', engine=None, local_dict=None, global_dict=None, resolvers=(), level=0, target=None, inplace=False)[source]
-
Оцените строковое выражение Python с использованием различных бэкэндов.
Поддерживаются следующие арифметические операции:
+,-,*,/,**,%,//(только движок Python) вместе со следующими логическими операциями:|(или),&(и), и~(не). Кроме того, синтаксический анализатор'pandas'позволяет использоватьand,or, иnotс той же семантикой, что и соответствующие побитовые операторы.SeriesиDataFrameобъекты поддерживаются и ведут себя так же, как и при обычной оценке в Python.
- Параметры:
-
- expr:str
-
Выражение для вычисления. Эта строка не может содержать никаких Python-команд выражений, только Python выражения.
- parser:{‘pandas’, ‘python’}, по умолчанию ‘pandas’
-
Парсер, используемый для построения синтаксического дерева из выражения. По умолчанию
'pandas'анализирует код немного по-другому, чем стандартный Python. В качестве альтернативы, вы можете проанализировать выражение с помощью парсера'python', чтобы сохранить строгую семантику Python. Дополнительные сведения см. в документации по улучшению производительности. - engine:{‘python’, ‘numexpr’}, по умолчанию ‘numexpr’
-
Двигатель, используемый для вычисления выражения. Поддерживаемые движки:
None : пытается использовать
numexpr, в противном случае используетpython'numexpr': Этот движок по умолчанию вычисляет объекты pandas с помощью numexpr для существенного повышения скорости в сложных выражениях с большими фреймами.'python': Выполняет операции так, как будто вы выполнили ихevalв верхнем уровне Python. Как правило, этот движок не очень полезен.
В будущем могут быть доступны и другие бэкэнды.
- local_dict:dict или None, необязательно
-
Словарь локальных переменных, по умолчанию взятый из locals().
- global_dict:dict или None, необязательно
-
Словарь глобальных переменных, по умолчанию взятый из globals().
- resolvers:список dict-подобных объектов или None, необязательно
-
Список объектов, реализующих специальный метод
__getitem__, который вы можете использовать для вставки дополнительного набора пространств имен для поиска переменных. Например, это используется в методеquery()для вставки переменныхDataFrame.indexиDataFrame.columns, которые ссылаются на атрибуты экземпляраDataFrame. - level:int, необязательно
-
Количество предыдущих кадров стека для обхода и добавления в текущий объем. Большинству пользователей не нужно изменять этот параметр.
- target:объект, необязательно, по умолчанию None
-
Это целевой объект для присвоения. Он используется, когда в выражении происходит присвоение переменной. В таком случае target должен поддерживать присвоение элемента со строковыми ключами, а если возвращается копия, то он также должен поддерживать .copy().
- inplace:bool, по умолчанию False
-
Если target предоставлен, и выражение изменяет target, то следует ли изменить target на месте. В противном случае возвращается копия target с произведённым изменением.
- Возвращаемое значение:
-
- ndarray, числовой скаляр, DataFrame, Series или None
-
Значение завершения вычисления данного кода или None, если
inplace=True.
- Исключения:
-
- ValueError
-
Возникает во многих случаях:
target=None, но выражение многострочное.
-
Выражение многострочное, но не все строки содержат присвоение элемента. Пример такого расположения:
a = b + 1 a + 2
Здесь есть выражения на разных строках, что делает их многострочными, но в последней строке нет переменной, присвоенной результату a + 2.
inplace=True, но выражение не содержит присвоения элемента.
Присвоение элемента предоставлено, но target не поддерживает присвоение элемента со строковым ключом.
Присвоение элемента предоставлено и inplace=False, но target не поддерживает метод .copy()
См. также
DataFrame.query-
Вычисляет булево выражение для запроса столбцов фрейма.
DataFrame.eval-
Вычисляет строку, описывающую операции со столбцами DataFrame.
Примечания
Тип
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
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.2.2/reference/api/pandas.eval.html