dask.dataframe.DataFrame.query

dask.dataframe.DataFrame.query

DataFrame.query(expr, **kwargs)[源代码]

使用复杂表达式过滤数据框

被阻止的 pd.DataFrame.query 版本

参数
expr: str

要评估的查询字符串。你可以通过用反引号包围它们来引用不是有效 Python 变量名的列名。Dask 不完全支持使用 ‘@’ 字符引用变量,请改用 f-strings 或 local_dict 关键字参数。

注释

这类似于顺序版本,只不过这将在多个线程中同时发生。这可能与 numexpr 发生冲突,因为它本身会使用多个线程。我们建议您将 numexpr 设置为使用单个线程:

import numexpr
numexpr.set_num_threads(1)

示例

>>> import pandas as pd
>>> import dask.dataframe as dd
>>> df = pd.DataFrame({'x': [1, 2, 1, 2],
...                    'y': [1, 2, 3, 4],
...                    'z z': [4, 3, 2, 1]})
>>> ddf = dd.from_pandas(df, npartitions=2)

直接引用列名:

>>> ddf.query('y > x').compute()
   x  y  z z
2  1  3    2
3  2  4    1

使用反引号引用列名:

>>> ddf.query('`z z` > x').compute()
   x  y  z z
0  1  1    4
1  2  2    3
2  1  3    2

使用 f-strings 引用变量名:

>>> value = 1
>>> ddf.query(f'x == {value}').compute()
   x  y  z z
0  1  1    4
2  1  3    2

使用 local_dict 引用变量名:

>>> ddf.query('x == @value', local_dict={"value": value}).compute()
   x  y  z z
0  1  1    4
2  1  3    2