Pandas 的 DataFrame.query(~)
方法根据提供的布尔表达式过滤行。
参数
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
,它只是Series
的Numpy array
表示。 -
接下来,我们调用
max()
,这是所有 Numpy 数组都可用的方法。在本例中,max()
返回6
,因为6
是B
列中的最大值。
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
相关用法
- Python Pandas DataFrame quantile方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
- Python Pandas DataFrame pow方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame lt方法用法及代码示例
- Python Pandas DataFrame all方法用法及代码示例
- Python Pandas DataFrame unstack方法用法及代码示例
- Python Pandas DataFrame mean方法用法及代码示例
- Python PySpark DataFrame filter方法用法及代码示例
- Python Pandas DataFrame tz_convert方法用法及代码示例
- Python Pandas DataFrame isin方法用法及代码示例
- Python PySpark DataFrame collect方法用法及代码示例
- Python PySpark DataFrame intersect方法用法及代码示例
- Python PySpark DataFrame dtypes属性用法及代码示例
- Python Pandas DataFrame rank方法用法及代码示例
- Python Pandas DataFrame tail方法用法及代码示例
- Python Pandas DataFrame transform方法用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | query method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。