pandas.DataFrame.query#

DataFrame.query(expr, inplace=False, **kwargs)[源代码]#

使用布尔表达式查询DataFrame的列。

参数
expr应力

要计算的查询字符串。

您可以在环境中引用变量,方法是在变量前加上一个‘@’字符,如下所示 @a + b

您可以通过用反引号将列名称括起来来引用不是有效的Python变量名的列名。因此,包含空格或标点符号(下划线除外)或以数字开头的列名必须用反号括起来。(例如,名为“Area(cm^2)”的列将被引用为 `Area (cm^2) `)。不能使用作为Python关键字的列名(如“list”、“for”、“import”等)。

例如,如果您的一个列被调用 a a 你想把它加起来 b ,您的查询应该是 `a a` + b

0.25.0 新版功能: 引入了反引号引用。

1.0.0 新版功能: 扩展了反引号的功能,不只是空格。

inplace布尔尔

查询是应该就地修改数据还是返回修改后的副本。

**kwargs

请参阅的文档 eval() 有关接受的关键字参数的完整详细信息 DataFrame.query()

退货
DataFrame或无

由提供的查询表达式产生的DataFrame,或者如果 inplace=True

参见

eval

计算描述DataFrame列上的操作的字符串。

DataFrame.eval

计算描述DataFrame列上的操作的字符串。

注意事项

此表达式的求值结果首先传递给 DataFrame.loc 如果由于多维密钥(例如,DataFrame)而失败,则结果将被传递到 DataFrame.__getitem__()

此方法使用顶级 eval() 函数计算传递的查询。

这个 query() 默认情况下,方法使用略微修改过的Python语法。例如, &| (按位)运算符的优先级高于它们的布尔同类运算符, andor 。这 is 在语法上是有效的,但是语义是不同的。

您可以通过传递关键字参数来更改表达式的语义 parser='python' 。这强制执行与在Python空间中求值相同的语义。同样,你也可以通过 engine='python' 要使用Python本身作为后端来计算表达式。不建议这样做,因为与使用 numexpr 作为引擎。

这个 DataFrame.indexDataFrame.columns 对象的属性 DataFrame 实例默认放置在查询命名空间中,这使您可以将框架的索引和列都视为框架中的列。该识别符 index 用于帧索引;您还可以使用索引的名称在查询中标识它。请注意,不能将Python关键字用作标识符。

有关更多详细信息和示例,请参阅 query 中的文档 indexing

反引号引用的变量

带反引号的变量被解析为字面形式的Python代码,并在内部转换为一个有效的Python标识符。这可能会导致以下问题。

在解析过程中,反引号带引号的字符串中的一些不允许的字符将被允许作为Python标识符的字符串替换。这些字符包括Python中的所有运算符、空格字符、问号、感叹号、美元符号和欧元符号。对于ASCII范围之外的其他字符(U+0001..U+007F)以及PEP 3131中未进一步指定的字符,查询解析器将引发错误。这不包括不同于空格字符的空格,但也不包括hashtag(因为它用于注释)和反标记本身(反标记也不能转义)。

在特殊情况下,反号前后的引号可能会使解析器感到困惑。例如, `it's` > `that's 将引发错误,因为它形成了一个带引号的字符串 (`'s > that'` )内有反记号。

另请参阅有关词法分析(https://docs.python.org/3/reference/lexical_analysis.html)的PYTHON文档以及 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