当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame query方法用法及代码示例


Pandas 的 DataFrame.query(~) 方法根据提供的布尔表达式过滤行。

注意

query(~) 方法返回数据的副本,因此您无法使用该方法更新 DataFrame 的值。要执行更新,请使用 loc iloc 等属性,它们返回引用而不是副本。

参数

1. expr | string

过滤行的条件。该字符串必须是布尔表达式(例如"A == 2""A > 3",其中A 是列名称)。

2. inplace | boolean | optional

  • 如果是True,那么该方法将直接修改源DataFrame,而不是创建新的DataFrame。

  • 如果是False,则将创建并返回一个新的DataFrame。

默认情况下,inplace=False

返回值

包含已过滤行的DataFrame

例子

考虑以下 DataFrame :

import pandas as pd
df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6], "C":[7,8,9]})
df



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

平等查询

要获取列 A 的值为 2 的所有行:

df.query("A == 2")



   A  B  C
1  2  5  8

对于not-equals 查询,请改用!=

带有字符串值的查询

当引用string-typed值时,将它们包装在'"中,如下所示:

df = pd.DataFrame({"A":["a","b"]})
df.query("A == 'a'")



   A
0  a

带有布尔值的查询

通过布尔值查询:

df = pd.DataFrame({"A":[True,False]})
df.query("A == True")



   A
0  True

范围查询

要获取列 A 的值大于 1 的所有行:

df.query("A > 1")



   A  B  C
1  2  5  8
2  3  6  9

区间查询

要获取列 A 的值介于 1 和 3 之间(两端都不包括)的所有行:

df.query("1 < A < 3")



   A  B  C
1  2  5  8

AND 查询

要获取列 A == 3 和列 C == 9 的所有行:

df.query("A == 3 and C == 9")



   A  B  C
2  3  6  9

或查询

要获取列 A == 1 或列 C == 9 的所有行:

df.query("A == 1 or C == 9") 



   A  B  C
0  1  4  7
2  3  6  9

使用 column-comparisons 进行查询

要获取列 C 的值大于列 A 的所有行:

df.query("C > A")



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

带有算术运算的查询

要获取 C 的值加 1 为 10 的所有行:

df.query("C + 1 == 10")



   A  B  C
2  3  6  9

具有对象访问权限的查询

您还可以使用点符号访问对象属性和方法:

df.query("B.values.max() < C")



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

在此,请注意以下事项:

  • B 的类型为 Series ,因此您可以访问 Series 可用的所有属性和方法。

  • 其中一个属性是 values ,它只是 SeriesNumpy array 表示。

  • 接下来,我们调用 max() ,这是所有 Numpy 数组都可用的方法。在本例中, max() 返回 6,因为 6B 列中的最大值。

IN 查询

考虑以下 DataFrame :

df = pd.DataFrame({"A":["aa","aa","aA","AA"],"B":["b","b","b","b"]})
df



   A   B
0  aa  b
1  aa  b
2  aA  b
3  AA  b

要获取 A 的值位于 arr 中的所有行:

arr = ["aa","AA"]
df.query("A in @arr")



   A   B
0  aa  b
1  aa  b
3  AA  b

这里,arr 带有 @ 前缀,因为它是外部变量。

不在查询中

考虑相同的 DataFrame:

df = pd.DataFrame({"A":["aa","aa","aA","AA"],"B":["b","b","b","b"]})
df



   A   B
0  aa  b
1  aa  b
2  aA  b
3  AA  b

要获取 A 的值不在 arr 中的所有行:

arr = ["aa","AA"]
df.query("A not in @arr")



   A   B
2  aA  b

参考索引

考虑以下 DataFrame :

df = pd.DataFrame({"A":[2,3,4],"B":[5,6,7]})
df



   A  B
0  2  5
1  3  6
2  4  7

要引用索引,只需包含单词index,如下所示:

df.query("index > 1")



   A  B
2  4  7

处理带空格的列名

当列名包含空格时,您需要在列名周围添加back-ticks `

考虑以下 DataFrame :

df = pd.DataFrame({"A A":[1,2],"B":[3,4]})
df



   A A  B
0   1   3
1   2   4

在这里,第一列(即 A A )的名称中包含空格。为了解决这个问题,请像下面这样包装`

df.query("`A A` == 2")



   A A  B
1   2   4

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | query method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。