pandas.DataFrame.query # 数据框。查询( expr , * , inplace = False , ** kwargs ) [来源] # 使用布尔表达式查询 DataFrame 的列。 参数: 表达式字符串要评估的查询字符串。 您可以通过在变量前面加上“@”字符(如 )来引用环境中的变量 。@a + b 您可以通过用反引号括起非有效 Python 变量名的列名来引用这些列名。因此,包含空格或标点符号(下划线除外)或以数字开头的列名必须用反引号括起来。 (例如,名为“面积 (cm^2)”的列将被引用为)。不能使用 Python 关键字(如“list”、“for”、“import”等)的列名。`Area (cm^2)` 例如,如果您的某一列被调用并且您想将其与 相加,则您的查询应该是。a ab`a a` + b 就地布尔值是否修改 DataFrame 而不是创建一个新的。 **夸格eval()有关 接受的关键字参数的完整详细信息,请参阅 的文档DataFrame.query()。 返回: 数据框或无由提供的查询表达式生成的 DataFrame 或 None if inplace=True。 也可以看看 eval评估描述 DataFrame 列操作的字符串。 DataFrame.eval评估描述 DataFrame 列操作的字符串。 笔记 该表达式的求值结果首先被传递到 DataFrame.loc,如果由于多维键(例如 DataFrame)而失败,则结果将被传递到DataFrame.__getitem__()。 此方法使用顶级eval()函数来评估传递的查询。 该query()方法默认使用稍微修改过的 Python 语法。例如,&and (按位)运算符具有其布尔表兄弟和| 的优先级 。这在语法上是有效的 Python,但语义不同。andor 您可以通过传递关键字参数来更改表达式的语义parser='python'。这强制执行与 Python 空间中的求值相同的语义。同样,您可以engine='python' 使用 Python 本身作为后端来评估表达式。不建议这样做,因为numexpr与用作引擎相比效率较低。 实例的 DataFrame.index和 属性默认放置在查询命名空间中,这允许您将框架的索引和列视为框架中的列。标识符用于帧索引;您还可以使用索引的名称在查询中识别它。请注意,Python 关键字不能用作标识符。DataFrame.columnsDataFrameindex 有关更多详细信息和示例,请参阅索引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