在给定的DataFrame中,根据条件筛选出自己需要的数据。可以有单条件筛选和多条件筛选等。[大谦Excel,dqexcel点com]
单条件筛选
【问题描述】
在DataFrame中,根据给定的一个条件筛选出想要的数据。
【示例3-34】
本例使用的Excel文件的完整路径为“D:/Samples/ch03/06 数据筛选/单条件筛选/各科室人员.xlsx”。该文件打开后如图3-24所示,是各科室人员的资料信息。请筛选出工资大于4000元的人员的资料。
图3-24 各科室人员资料
- ChatGPT提示词模板
新建ChatGPT会话,在提问文本框中输入下面的提示词:
你是pandas专家,文件路径为:D:/Samples/ch03/06 数据筛选/单条件筛选/各科室人员.xlsx。该Excel文件的第一个工作表中A1:G10为给定数据,A-G列分别为“编号”、“性别”、“年龄”、”学历“、”科室“、”职务等级“和“工资”数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl",请筛选出工资大于4000元的行数据。
2. 代码
- 根据提示词得到类似下面的代码:
import pandas as pd
# 加载Excel文件
data = pd.read_excel('D:/Samples/ch03/06 数据筛选/单条件筛选/各科室人员.xlsx', engine='openpyxl')
# 筛选出工资大于4000元的行数据
result = data[data['工资'] > 4000]
# 打印结果
print(result)
3. 使用代码
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出工资大于4000的人员的资料。
>>> === RESTART: D:/Samples/ch03/1.py ==
编号 性别 年龄 学历 科室 职务等级 工资
0 10001 女 45 本科 科室2 正处级 4300
3 10004 女 40 博士 科室1 副局级 4400
4 10005 男 55 本科 科室2 副局级 4500
5 10006 男 35 硕士 科室3 正处级 4100
8 10009 男 50 硕士 科室1 正局级 4800
【知识点扩展】
本例中通过布尔索引实现单条件筛选,即
result = data[data['工资'] > 4000]
关系运算表达式data['工资'] > 4000得到是否满足条件的布尔值,然后用它们取索引data,得到索引值为1的所有行数据。
实现单条件筛选,还可以使用DataFrame对象的where方法、mask方法和filter方法等。下面的代码先用DataFrame的where方法找到工资大于4000的行,不满足条件的行都变成空行。然后用dropna方法删除空行,剩下的都是满足条件的行。
df=df.where(df['工资']>4000)
df=df.dropna(how='any',axis=0)
下面的代码先用DataFrame的mask方法找到工资大于4000的行,不满足条件的行都变成空行。然后用dropna方法删除空行,剩下的都是满足条件的行。
df=df.mask(df['工资']<=4000)
df=df.dropna(how='any',axis=0)
注意,where方法和mask方法的条件表达式是相反的。
下面的代码用DataFrame对象的filter方法筛选出”A”和”C”列的数据。
df=df.filter(items=['A','C'])
多条件筛选
【问题描述】
在DataFrame中,根据给定的多个条件筛选出想要的数据。
【示例3-35】
本例使用例3-34的数据。请筛选出部门为科室1,工资大于4000元的行数据。
- ChatGPT提示词模板
新建ChatGPT会话,在提问文本框中输入下面的提示词:
你是pandas专家,文件路径为:D:/Samples/ch03/06 数据筛选/多条件筛选/各科室人员.xlsx。该Excel文件的第一个工作表中A1:G10为给定数据,A-G列分别为“编号”、“性别”、“年龄”、”学历“、”科室“、”职务等级“和“工资”数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl",请筛选出部门为科室1,工资大于4000元的行数据。
2. 代码
- 根据提示词得到类似下面的代码:
import pandas as pd
# 读取Excel文件
df = pd.read_excel('D:/Samples/ch03/06 数据筛选/多条件筛选/各科室人员.xlsx', engine='openpyxl')
# 筛选出科室为科室1,工资大于4000元的行数据
result = df[(df['科室'] == '科室1') & (df['工资'] > 4000)]
print(result)
3. 使用代码
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出部门为科室1,工资大于4000元的人员的资料。
>>> === RESTART: D:/Samples/ch03/1.py ==
编号 性别 年龄 学历 科室 职务等级 工资
3 10004 女 40 博士 科室1 副局级 4400
8 10009 男 50 硕士 科室1 正局级 4800
【知识点扩展】
与单条件筛选相同,多条件筛选也可以通过布尔索引,以及DataFrame对象的where方法、mask方法和filter方法等来实现。