在Pandas中使用query函数基于列值过滤行

在Pandas中使用query函数基于列值过滤行

数据在处理中往往需要对行进行筛选,以满足特定需求。Pandas是一个强大的数据处理工具,可以让我们轻松地在数据中进行筛选和过滤。其中,query函数是一种基于列值快速筛选行的方法。本文将详细介绍在Pandas中使用query函数基于列值过滤行的方法。

数据准备

首先,我们需要准备一些示例数据。我们将创建一个包含“姓名”、“年龄”、“性别”和“分数”的简单数据框:

import pandas as pd

data = {'姓名': ['A', 'B', 'C', 'D', 'E'],
        '年龄': [18, 19, 20, 21, 22],
        '性别': ['男', '女', '男', '女', '男'],
        '分数': [85, 90, 88, 92, 91]}
df = pd.DataFrame(data)
print(df)

输出结果如下:

  姓名  年龄 性别  分数
0  A  18  男  85
1  B  19  女  90
2  C  20  男  88
3  D  21  女  92
4  E  22  男  91

基于列值过滤行

使用query函数,我们可以按照行中某一列的值进行筛选。例如,我们要筛选出年龄大于等于20岁的学生,可以使用以下语句:

result = df.query('年龄 >= 20')
print(result)

输出结果如下:

  姓名  年龄 性别  分数
2  C  20  男  88
3  D  21  女  92
4  E  22  男  91

query函数传入的参数是一个字符串,字符串中包含了一个布尔表达式,这个表达式对行中每个元素都进行了判断,如果满足条件,那么这一行就被筛选出来。在本例中,我们使用了“>=”符号,表示年龄大于等于20岁的学生。

类似地,我们可以使用其他的符号进行比较,例如:“>”、“<”、“”、“!=”等等。我们还可以使用and和or等逻辑操作符进行复杂的过滤操作。例如,我们要筛选出年龄在20岁到25岁之间、分数在90分以上的男学生,可以使用以下语句:

result = df.query('(年龄 >= 20) and (年龄 <= 25) and (分数 > 90) and (性别 == "男")')
print(result)

输出结果如下:

  姓名  年龄 性别  分数
4  E  22  男  91

在这个过滤语句中,我们使用了括号将不同的条件进行了分组,并使用了and逻辑操作符将所有条件链接起来。

使用变量进行过滤

在query函数中,我们还可以使用变量来进行动态的过滤操作。例如,我们要通过用户的输入来动态地筛选数据,可以将用户输入的值存储在变量中,然后将变量传递给query函数。以下是一个简单的示例:

name = input("请输入要查询的姓名:")
result = df.query('姓名 == @name')
print(result)

在这个示例中,我们使用了“@”符号将变量名引入到query函数中。这样,我们就可以通过用户的输入来实现动态筛选了。

注意事项

在使用query函数过程中,我们需要注意以下几点:

  1. 字符串、数字等类型的值都要用引号括起来;
  2. 如果要引用列名,需要在列名前加上“@”符号;
  3. query函数中可以使用Python的所有运算符,例如“”、“!=”、“>=”、“<=”、“in”、“not in”等等;
  4. 如果要筛选出空值(NaN),可以使用“isnull()”、“notnull()”函数。

结论

在Pandas中,query函数是一种强大的基于列值过滤行的方法。我们可以使用query函数按照用户需求进行动态的筛选操作。在使用query函数的过程中,我们需要注意一些细节,例如将变量引入query函数中、使用正确的运算符等等。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程