在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函数过程中,我们需要注意以下几点:
- 字符串、数字等类型的值都要用引号括起来;
- 如果要引用列名,需要在列名前加上“@”符号;
- query函数中可以使用Python的所有运算符,例如“”、“!=”、“>=”、“<=”、“in”、“not in”等等;
- 如果要筛选出空值(NaN),可以使用“isnull()”、“notnull()”函数。
结论
在Pandas中,query函数是一种强大的基于列值过滤行的方法。我们可以使用query函数按照用户需求进行动态的筛选操作。在使用query函数的过程中,我们需要注意一些细节,例如将变量引入query函数中、使用正确的运算符等等。