pandas.DataFrame.query() 是 Pandas 提供的一个强大方法,可以使用类似 SQL 的表达式从 DataFrame 中筛选数据,语法简洁且可读性强。pandas.DataFrame.query(expr, *, inplace=False, **kwargs) 是 pandas DataFrame 中一个非常强大且灵活的方法,用于基于布尔表达式筛选 DataFrame 的行。pandas.DataFrame.query() 是一个用于根据条件高效且可读地筛选 DataFrame 行的强大工具。它提供了一种更接近 SQL 的方式来操作数据,可以显著简化 pandas 代码。本文主要介绍一下Pandas中pandas.DataFrame.query方法的使用。

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

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

参数:

exprstr

要评估的查询字符串。

可以在环境中引用变量,

方法是在变量前加上'@'字符,

例如 。@a + b

可以通过在反引号中将空格或运算符括起来来引用它们。

这样,还可以转义以数字开头或Python关键字的名称。

基本上是无效的Python标识符。

有关更多详细信息,请参见注释。

例如,如果你的一列叫做a a

想把它和b相加,查询应该是' a a ' + b

0.25.0版中的新功能:

引入了反引号引号。

1.0.0版中的新增功能:

扩展了反引号引号的功能,不仅限于空格。

inplacebool

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

**kwargs

有关eval()接受的关键字参数的完整详细信息,

请参见文档DataFrame.query()

返回值:

DataFrame

由提供的查询表达式产生的DataFrame

Notes

DataFrame.query() 方法说明

在 Pandas 中,DataFrame.query() 方法允许使用类似 SQL 的表达式对数据进行筛选。该表达式的求值结果首先会传递给 DataFrame.loc,如果因多维键(如一个 DataFrame 对象)导致失败,则会退而调用 DataFrame.__getitem__() 方法。

query() 方法内部使用顶层的 eval() 函数来评估传入的表达式。

默认情况下,query() 使用经过轻微调整的 Python 语法。例如,按位运算符 &| 的优先级高于其布尔对应物 andor。这种语法在语法上属于合法的 Python 表达式,但语义上略有不同。

如果需要使用与原生 Python 相同的语义解析方式,可以通过设置参数 parser='python' 来强制按 Python 解析表达式。同样,通过设置 engine='python' 可以指定使用 Python 本身作为计算后端(而非默认的 numexpr 引擎),但不推荐这样做,因为效率较低。

在查询表达式的命名空间中,默认会引入当前 DataFrameindexcolumns,允许你像访问列一样使用它们。其中标识符 index 表示 DataFrame 的索引;你也可以通过索引的名称进行访问。请注意,Python 的保留关键字不能作为变量名使用。

更多信息与示例可参考 Pandas 文档中的 query 和索引部分的说明。

 关于反引号引用变量

使用反引号(`)包裹的变量在 query() 中会被当作字符串形式的 Python 表达式进行解析,并在内部转换为合法的 Python 标识符。然而,这种方式可能引发一些问题:

  • 解析时,包含非法字符(如运算符、空格、问号、感叹号、美元符号、欧元符号等)的变量名会被替换为合法形式。

  • 若包含非 ASCII 字符(不在 U+0001U+007F 范围内)且未被 PEP 3131 明确支持,解析器会抛出错误。

  • 某些特殊情况中,反引号与引号混用可能导致语法解析错误。如 df.query("`it's` > `that's`")

    会被解析为错误的表达式 's > that'`,从而触发异常。

例子

import pandas as pd

df = pd.DataFrame({
    'age': [18, 22, 25, 30],
    'score': [80, 90, 85, 88],
    'gender': ['M', 'F', 'F', 'M']
})

# 查询 age > 20 且 gender 为 'F'
result = df.query("age > 20 and gender == 'F'")
print(result)

1)使用外部变量(使用 @ 引用)

import pandas as pd

df = pd.DataFrame({
    'age': [18, 22, 25, 30],
    'score': [80, 90, 85, 88],
    'gender': ['M', 'F', 'F', 'M']
})

threshold = 85
result = df.query("score > @threshold")
print(result)

2)查询列名包含空格或特殊字符(需使用反引号 `

import pandas as pd

df = pd.DataFrame({
    'age': [18, 22, 25, 30],
    'score': [80, 90, 85, 88],
    'gender': ['M', 'F', 'F', 'M']
})

df2 = pd.DataFrame({
    'product name': ['A', 'B', 'C'],
    'price($)': [10, 20, 15]
})
print(df2.query("`price($)` > 12"))

推荐文档

相关文档

大家感兴趣的内容

随机列表