pandas.DataFrame.query#

DataFrame.запрос(expr, *, inplace=False, **kwargs)[источник]#

в руководстве пользователя по пропущенным данным.

Параметры:
exprstr

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

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

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

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

inplacebool

Следует ли изменять DataFrame вместо создания нового.

**kwargs

См. документацию для eval() для полной информации о ключевых аргументах, принимаемых DataFrame.query().

Возвращает:
DataFrame или None

DataFrame, полученный в результате предоставленного выражения запроса, или None, если inplace=True.

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

eval

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

DataFrame.eval

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

Примечания

Результат вычисления этого выражения сначала передается в DataFrame.loc и если это не удаётся из-за многомерного ключа (например, DataFrame), то результат будет передан в DataFrame.__getitem__().

Этот метод использует верхнеуровневый eval() функция для оценки переданного запроса.

The query() метод использует слегка измененный синтаксис Python по умолчанию. Например, & и | (побитовые) операторы имеют приоритет своих булевых аналогов, and и or. Это является синтаксически корректный Python, однако семантика отличается.

Вы можете изменить семантику выражения, передав ключевой аргумент parser='python'. Это обеспечивает ту же семантику, что и оценка в пространстве Python. Аналогично, вы можете передать engine='python' для вычисления выражения с использованием самого Python в качестве бэкенда. Это не рекомендуется, так как неэффективно по сравнению с использованием numexpr в качестве движка.

The 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