pandas.eval
- pandas.eval(expr, parser='pandas', engine=None, truediv=_NoDefault.no_default, 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’}, default ‘pandas’
-
Парсер для построения синтаксического дерева из выражения. По умолчанию
'pandas'парсер анализирует код немного иначе, чем стандартный Python. В качестве альтернативы, вы можете использовать'python'парсер для сохранения строгой семантики Python. Для получения дополнительной информации см. документацию улучшение производительности. - engine:{‘python’, ‘numexpr’}, default ‘numexpr’
-
Движок, используемый для вычисления выражения. Поддерживаемые движки:
None : пытается использовать
numexpr, в противном случае возвращается кpython'numexpr': Этот движок по умолчанию вычисляет pandas объекты с помощью numexpr для значительного ускорения сложных выражений с большими фреймами.'python': Выполняет операции так, как если бы выevalв верхнем уровне python. Этот движок, как правило, не очень полезен.
В будущем может быть доступно больше бэкендов.
- truediv:bool, optional
-
Использовать деление с плавающей точкой, как в Python >= 3.
Устарело начиная с версии 1.0.0.
- local_dict:dict or None, optional
-
Словарь локальных переменных, по умолчанию взятых из locals()
- global_dict:dict or None, optional
-
Словарь глобальных переменных, по умолчанию взятых из globals()
- resolvers:list of dict-like or None, optional
-
Список объектов, реализующих метод
__getitem__, которые вы можете использовать для вставки дополнительного набора пространств имен для поиска переменных. Например, это используется в методеquery()для вставки переменныхDataFrame.indexиDataFrame.columns, которые ссылаются на соответствующие атрибуты экземпляраDataFrame. - level:int, optional
-
Количество предыдущих стековых кадров, которые нужно пройти и добавить в текущий объём. Большинству пользователей не нужно изменять этот параметр.
- target:object, optional, default None
-
Это целевой объект для присваивания. Он используется, когда в выражении есть присвоение переменной. В этом случае target должен поддерживать присвоение элементов со строковыми ключами, а если возвращается копия, то она также должна поддерживать .copy().
- inplace:bool, default 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/1.5.0/reference/api/pandas.eval.html