[Pandas] query()函数

文章介绍了如何利用Python的Pandas库中的query函数对数据进行筛选,包括按特定列的值、数学表达式、变量以及多个条件进行筛选,同时也展示了如何选取筛选后的特定列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在数据处理过程中经常会进行数据筛选,获得自己想要的数据

使用Pandas进行数据筛选的方法有很多,在这里主要讲解使用查询函数query()进行数据筛选操作

导入数据 

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])

df

问题1: 筛选'name'列中值为 'Eorge' 的数据行 

直接通过等于==某个值进行数据筛选 

# 等价于 df[df['name']=="Eorge"]
res1 = df.query('name == "Eorge"')

res1

问题2: 筛选'Q1'大于'Q4'的数据行

通过数学表达式进行数据筛选 

res2 = df.query('Q1 > Q4')

res2 

扩展补充练习

'''
   name team  Q1  Q2  Q3  Q4
1  Arry    C  36  37  37  57
'''
df.query('Q1 * 2 <= Q2 + Q3')

问题3: 筛选'team'列中值为'C'的数据行 

通过变量进行数据筛选,query函数在使用变量作为判断标准时,通过在变量前面添加@符号来实现

team_number = 'C'
res3 = df.query('team == @team_number')

res3

问题4:  筛选'name'列中值为 'Arry' 或 'Ack'的数据行 

通过列表进行数据筛选,当需要在某列中筛选多个符合要求的值的时候,可以通过列表(list)来实现

res4 = df.query('name in ["Arry","Ack"]') 

res4

问题5: 筛选'Q1'列中值大于70 且 'Q2'列中的值大于50的数据行 

多条件进行数据筛选,query函数支持多种条件的组合

① 两者都需要满足的条件使用符号 & 单词 and

② 只需要满足其中之一的条件使用符号 |单词 or

res5 = df.query('Q1 > 70 & Q2 > 50')

res5

筛选后选取数据列'name'、'Q1'和'Q2'

res6 = df.query('Q1 > 70 & Q2 > 50')[['name','Q1','Q2']]

res6

扩展补充练习

import pandas as pd

df1 = pd.DataFrame({'col1':[1, 2, 3, 4, 5, 6],
                   'col2':[1, 2, 3, 4, 5, 6],
                   'col3':[1, 2, 3, 4, 5, 6]})

query_list = [1, 2]

res7 = df1.query('col3 not in @query_list')[['col1', 'col2']]

df1

res7 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值