在数据处理过程中经常会进行数据筛选,获得自己想要的数据
使用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