mars.dataframe.DataFrame.query#
- DataFrame.query(expr, inplace=False, **kwargs)#
 使用布尔表达式查询DataFrame的列。
- Parameters
 expr (str) –
要评估的查询字符串。
您可以通过在变量前加上 ' @ ' 字符来引用环境中的变量,就像
@a + b一样。您可以通过用反引号将包含空格或运算符的列名括起来来引用它们。这样您也可以转义以数字开头的名称,或那些是 Python 关键字的名称。基本上,当它不是有效的 Python 标识符时。有关更多详细信息,请参阅下面的说明。
例如,如果其中一列名为
a a并且您想与b进行求和,则您的查询应为`a a` + b。inplace (bool) – 查询是否应该就地修改数据或返回一个修改过的副本。
**kwargs – 请查看
eval()的文档以获取关于DataFrame.query()接受的关键字参数的完整细节。
- Returns
 由提供的查询表达式生成的DataFrame。
- Return type
 
另请参阅
eval评估描述对DataFrame列进行操作的字符串。
DataFrame.eval评估描述对DataFrame列进行操作的字符串。
备注
该表达式的评估结果首先传递给
DataFrame.loc,如果因为多维键(例如,一个 DataFrame)而失败,则结果将传递给DataFrame.__getitem__()。该方法使用顶层
eval()函数来 评估传递的查询。该
query()方法默认使用略微修改的 Python 语法。例如,&和|(位运算)运算符的优先级与它们的布尔对应物and和or相同。这 是 语法上有效的 Python,然而语义是不同的。您可以通过传递关键字参数
parser='python'来更改表达式的语义。这强制执行与在 Python 空间中评估相同的语义。同样,您可以传递engine='python'来使用 Python 本身作为后端来评估表达式。这并不推荐,因为与使用numexpr作为引擎相比,它效率较低。DataFrame.index和DataFrame.columns属性属于DataFrame实例,默认情况下被放置在查询命名空间中,这使得您可以将框架的索引和列视为框架中的一列。 标识符index用于框架索引;您也可以使用索引的名称在查询中标识它。请注意,Python 关键字不能作为标识符使用。有关更多详细信息和示例,请参见indexing中的
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中的源代码结合使用。示例
>>> import mars.dataframe as md >>> df = md.DataFrame({'A': range(1, 6), ... 'B': range(10, 0, -2), ... 'C C': range(10, 5, -1)}) >>> df.execute() 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').execute() A B C C 4 5 2 6
前面的表达式等价于
>>> df[df.A > df.B].execute() A B C C 4 5 2 6
对于名称中带有空格的列,您可以使用反引号引号。
>>> df.query('B == `C C`').execute() A B C C 0 1 10 10
之前的表达式是等价于
>>> df[df.B == df['C C']].execute() A B C C 0 1 10 10