Spec-Zone.ru › pandas 2

pandas.DataFrame.query

DataFrame.query(expr, *, inplace=False, **kwargs)[source]

Запрос к столбцам DataFrame с помощью логического выражения.

Параметры:
expr:str

Строка запроса для оценки.

Вы можете ссылаться на переменные в среде, добавляя перед ними символ «@» @a + b.

Вы можете ссылаться на имена столбцов, которые не являются допустимыми именами переменных Python, заключив их в обратные кавычки. Таким образом, имена столбцов, содержащие пробелы или знаки препинания (кроме нижних подчеркиваний) или начинающиеся с цифр, должны быть заключены в обратные кавычки. (Например, столбец с именем «Площадь (см^2)» будет указан как `Area (cm^2)`). Имена столбцов, являющиеся ключевыми словами Python (например, «list», «for», «import» и т. д.), использовать нельзя.

Например, если один из ваших столбцов называется a a и вы хотите сложить его с b, ваш запрос должен быть `a a` + b.

inplace:bool

Определяет, нужно ли изменять 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/2.2.2/reference/api/pandas.DataFrame.query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API