数据筛选

在给定的DataFrame中,根据条件筛选出自己需要的数据。可以有单条件筛选和多条件筛选等。[大谦Excel,dqexcel点com]

单条件筛选

【问题描述】

在DataFrame中,根据给定的一个条件筛选出想要的数据。

【示例3-34】

本例使用的Excel文件的完整路径为“D:/Samples/ch03/06 数据筛选/单条件筛选/各科室人员.xlsx”。该文件打开后如图3-24所示,是各科室人员的资料信息。请筛选出工资大于4000元的人员的资料。

Document Image

图3-24 各科室人员资料

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch03/06 数据筛选/单条件筛选/各科室人员.xlsx。该Excel文件的第一个工作表中A1:G10为给定数据,A-G列分别为“编号”、“性别”、“年龄”、”学历“、”科室“、”职务等级“和“工资”数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl",请筛选出工资大于4000元的行数据。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
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的人员的资料。

code.python
>>> === RESTART: D:/Samples/ch03/1.py ==
      编号 性别  年龄  学历   科室 职务等级    工资
0  1000145  本科  科室2  正处级  4300
3  1000440  博士  科室1  副局级  4400
4  1000555  本科  科室2  副局级  4500
5  1000635  硕士  科室3  正处级  4100
8  1000950  硕士  科室1  正局级  4800

【知识点扩展】

本例中通过布尔索引实现单条件筛选,即

code.python
result = data[data['工资'] > 4000]

关系运算表达式data['工资'] > 4000得到是否满足条件的布尔值,然后用它们取索引data,得到索引值为1的所有行数据。

实现单条件筛选,还可以使用DataFrame对象的where方法、mask方法和filter方法等。下面的代码先用DataFrame的where方法找到工资大于4000的行,不满足条件的行都变成空行。然后用dropna方法删除空行,剩下的都是满足条件的行。

code.python
df=df.where(df['工资']>4000)
df=df.dropna(how='any',axis=0)

下面的代码先用DataFrame的mask方法找到工资大于4000的行,不满足条件的行都变成空行。然后用dropna方法删除空行,剩下的都是满足条件的行。

code.python
df=df.mask(df['工资']<=4000)
df=df.dropna(how='any',axis=0)

注意,where方法和mask方法的条件表达式是相反的。

下面的代码用DataFrame对象的filter方法筛选出”A”和”C”列的数据。

code.python
df=df.filter(items=['A','C'])

多条件筛选

【问题描述】

在DataFrame中,根据给定的多个条件筛选出想要的数据。

【示例3-35】

本例使用例3-34的数据。请筛选出部门为科室1,工资大于4000元的行数据。

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch03/06 数据筛选/多条件筛选/各科室人员.xlsx。该Excel文件的第一个工作表中A1:G10为给定数据,A-G列分别为“编号”、“性别”、“年龄”、”学历“、”科室“、”职务等级“和“工资”数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl",请筛选出部门为科室1,工资大于4000元的行数据。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
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元的人员的资料。

code.python
>>> === RESTART: D:/Samples/ch03/1.py ==
      编号 性别  年龄  学历   科室 职务等级    工资
3  1000440  博士  科室1  副局级  4400
8  1000950  硕士  科室1  正局级  4800

【知识点扩展】

与单条件筛选相同,多条件筛选也可以通过布尔索引,以及DataFrame对象的where方法、mask方法和filter方法等来实现。