当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pandas.DataFrame.query用法及代码示例


用法:

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

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

参数

exprstr

要评估的查询字符串。

您可以通过在变量前面加上“@”字符来引用环境中的变量,例如 @a + b

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

例如,如果您的一列称为 a a 并且您想将其与 b 相加,则您的查询应该是 `a a` + b

inplacebool

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

**kwargs

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

返回

DataFrame 或无

DataFrame 由提供的查询表达式产生,如果 inplace=True 则为 None。

注意

该表达式的评估结果首先传递给DataFrame.loc,如果由于多维键(例如DataFrame)而失败,则结果将传递给DataFrame.__getitem__()

此方法使用顶级 eval() 函数来评估传递的查询。

pandas.DataFrame.query方法默认使用稍微修改的 Python 语法。例如,&|(按位)运算符具有其布尔表兄弟的优先级,andor.这语法上有效的 Python,但语义不同。

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

DataFrame 实例的DataFrame.indexDataFrame.columns 属性默认放置在查询命名空间中,这允许您将框架的索引和列都视为框架中的列。标识符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

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.DataFrame.query。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。