pandas.DataFrame.query
- DataFrame.query(expr, inplace=False, **kwargs)[source]
-
Запрос к столбцам DataFrame с помощью булевого выражения.
- Параметры
-
- expr:строка
-
Строка запроса для вычисления.
Вы можете ссылаться на переменные в среде, предваряя их символом «@», например
@a + b.Вы можете ссылаться на имена столбцов, которые не являются допустимыми именами переменных Python, заключая их в обратные кавычки. Таким образом, имена столбцов, содержащие пробелы или знаки препинания (кроме подчеркиваний) или начинающиеся с цифр, должны быть заключены в обратные кавычки. (Например, столбец с именем «Площадь (см^2)» будет ссылаться как
`Area (cm^2)`). Имена столбцов, являющиеся ключевыми словами Python (например, «список», «для», «импорт» и т. д.) использовать нельзя.Например, если один из ваших столбцов называется
a aи вы хотите сложить его сb, ваш запрос должен быть`a a` + b.Новое в версии 0.25.0: Введено обрамление обратными кавычками.
Новое в версии 1.0.0: Расширение функциональности обрамления обратными кавычками для больше, чем просто пробелов.
- inplace:булево
-
Изменять DataFrame вместо создания нового.
- **kwargs
-
См. документацию для
eval()для получения полной информации о ключевых аргументах, принимаемыхDataFrame.query().
- Возвращаемое значение
-
- DataFrame или None
-
DataFrame, полученный из выражения запроса, или None, если
inplace=True.
См. также
eval-
Вычислить строку, описывающую операции над столбцами DataFrame.
DataFrame.eval-
Вычислить строку, описывающую операции над столбцами DataFrame.
Примечания
Результат вычисления этого выражения сначала передается в
DataFrame.loc, и если это не удается из-за многомерного ключа (например, DataFrame), то результат будет передан вDataFrame.__getitem__().Этот метод использует функцию верхнего уровня
eval()для вычисления переданного запроса.Метод
query()по умолчанию использует слегка измененный синтаксис Python. Например, операторы&и|(побитовые) имеют приоритет своих булевых аналогов,andиor. Это является синтаксически корректным Python, однако семантика отличается.Вы можете изменить семантику выражения, передав ключевой аргумент
parser='python'. Это обеспечивает такую же семантику, как и вычисление в пространстве Python. Аналогично, вы можете передатьengine='python'для вычисления выражения с использованием самого Python в качестве бэкэнда. Это не рекомендуется, так как это неэффективно по сравнению с использованиемnumexprв качестве движка.Атрибуты
DataFrame.indexиDataFrame.columnsэкземпляраDataFrameпо умолчанию размещаются в пространстве имен запроса, что позволяет рассматривать и индекс, и столбцы фрейма как столбец в фрейме. Идентификаторindexиспользуется для индекса фрейма; вы также можете использовать имя индекса для его идентификации в запросе. Обратите внимание, что ключевые слова Python не могут использоваться в качестве идентификаторов.Для получения более подробной информации и примеров см. документацию
queryв индексации.Переменные в обратных кавычках
Переменные в обратных кавычках анализируются как литеральный код Python и преобразуются во внутренний код Python, допустимый для идентификаторов. Это может привести к следующим проблемам.
Во время анализа несколько запрещенных символов внутри строки в обратных кавычках заменяются строками, которые допустимы в качестве идентификатора Python. Эти символы включают все операторы в Python, пробел, знак вопроса, восклицательный знак, знак доллара и знак евро. Для других символов, которые выходят за пределы ASCII-диапазона (U+0001..U+007F) и тех, которые не указаны в PEP 3131, анализатор запроса выдаст ошибку. Это исключает пробелы, отличные от пробела, а также символ решетки (так как он используется для комментариев) и сам обратный апостроф (обратный апостроф также не может быть экранирован).
В особых случаях кавычки, образующие пару вокруг обратной кавычки, могут сбить анализатор с толку. Например,
`it's` > `that's`вызовет ошибку, так как образует строку с кавычками ('s > `that') с обратной кавычкой внутри.См. также документацию Python по лексическому анализу (https://docs.python.org/3/reference/lexical_analysis.html) в сочетании с исходным кодом в
pandas.core.computation.parsing.Примеры
>>> df = pd.DataFrame({'A': range(1, 6), ... 'B': range(10, 0, -2), ... 'C C': range(10, 5, -1)}) >>> df A B C C 0 1 10 10 1 2 8 9 2 3 6 8 3 4 4 7 4 5 2 6 >>> df.query('A > B') A B C C 4 5 2 6Предыдущее выражение эквивалентно
>>> df[df.A > df.B] A B C C 4 5 2 6
Для столбцов с пробелами в имени можно использовать обрамление обратными кавычками.
>>> df.query('B == `C C`') A B C C 0 1 10 10Предыдущее выражение эквивалентно
>>> df[df.B == df['C C']] A B C C 0 1 10 10
© 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.DataFrame.query.html