Pandas DataFrame DataFrame.query() 函数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.query() 语法
  2. 示例代码:DataFrame.query() 方法带单一条件
  3. 示例代码:当列名有空格时的 DataFrame.query() 方法
  4. 示例代码:DataFrame.query() 方法有多个条件
Pandas DataFrame DataFrame.query() 函数

pandas.DataFrame.query() 方法使用给定的查询表达式过滤调用者 DataFrame 的行。

pandas.DataFrame.query() 语法

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

参数

expr 基于过滤行的查询表达式
inplace 布尔型。如果为 True,就地修改调用者 DataFrame 数据
**kwargs 方法关键字参数

返回值

如果 inplaceTrue,则返回过滤后的 DataFrame;否则为 None

示例代码:DataFrame.query() 方法带单一条件

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

filtered_df=df.query('X>1')
print("Filtered DataFrame:")
print(filtered_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Filtered DataFrame:
   X  Y
1  2  1
2  3  8

它返回 DataFrame,其中只有满足给定查询表达式的行,即只有列 X 的值大于 1 的行。

示例代码:当列名有空格时的 DataFrame.query() 方法

在将此方法应用于 DataFrame 之前,我们必须确保要查询的列名中没有任何空格。

如果我们的列名中有空格,我们可以使用反勾引号(`)。

import pandas as pd

df = pd.DataFrame(
    {
        "X": [
            1,
            2,
            3,
        ],
        "Y": [4, 1, 8],
        "A B": [3, 5, 7],
    }
)
print("Original DataFrame:")
print(df)
filtered_df = df.query("`A B`>5")
print("Filtered DataFrame:")
print(filtered_df)

输出:

Original DataFrame:
   X  Y  A B
0  1  4    3
1  2  1    5
2  3  8    7
Filtered DataFrame:
   X  Y  A B
2  3  8    7

这里,列名 A B 有空格。要对该列进行查询表达式,我们将列名用反引号括起来,否则会出现错误。

示例代码:DataFrame.query() 方法有多个条件

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

filtered_df=df.query('X>1' and 'Y==1')
print("Filtered DataFrame:")
print(filtered_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Filtered DataFrame:
   X  Y
1  2  1

如果我们希望根据多个条件过滤 DataFrame,我们使用 and 操作符将多个查询表达式组合成一个复合查询表达式。

它给出的 DataFrame 中,列 X 的值大于 1,列 Y 的值等于 1 的行。

我们可以在调用 query() 方法后,通过设置 inplace=True 来修改原来的 DataFrame

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
filtered_df=df.query('X>1' and 'Y==1',inplace=True)
print(df)

输出:

   X  Y
1  2  1
作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Pandas DataFrame