利用Pandas处理Excel数据 - 图1

一、筛选功能

(一)加载Excel数据

read_excel读取数据.webp

  1. import pandas as pd
  2. df = pd.read_excel('数据.xlsx',sheet_name = 'data')
  • pd.read_excel,加载数据
  • 第一个参数,指定数据源路径

    注意绝对路径与相对路径

  • sheet_name ,指定读取工作表

  • 由于工作表中有多余的列数据,我们只需要前10列,因此指定 usecols 参数。
    他接受一个列表。list(range(0,10)),其实相当于[0,1,2…………,9]的一个列表
  • 参数详解可参照read_excel参数详解
  • 本文示例数据如下:

数据.xlsx

成绩单-高级筛选.xlsx
利用Pandas处理Excel数据 - 图3


(二)按位置(索引)筛选

  1. # 筛选第3行到第6行
  2. df.loc[2:5]

1、按索引筛选

loc和iloc索引.png


2、按值筛选

1.单条件按值筛选

利用Pandas处理Excel数据 - 图5

    • df[‘sex’] ,就是性别列
    • df[‘sex’]==’M’ ,语义清晰,性别等于M

      2.多条件按值筛选

  • 多条件也不在话下,”显示男性并且血型是A+”,如下:

利用Pandas处理Excel数据 - 图6


3、query方法

1.单条件筛选

640.webp

2.多条件筛选

利用Pandas处理Excel数据 - 图8

  • query 方法,可以直接接受一个查询字符串,是不是很像 Sql 呢

指定多个值也很简单,”血型是A+或B-“,如下:

利用Pandas处理Excel数据 - 图9

  • 查询字符串可以直接用 in

    3.值范围

  • “收入在5000至8000的男性”,pandas 如下:

利用Pandas处理Excel数据 - 图10

4.接受外部变量

640 (1).webp

  • 筛选班级为4,5,7的

640 (2).webp

  • 查询字符串要使用外部变量,只需要写 “@+变量名字” 即可

5.按新增求和列筛选

640 (3).webp

  • 第一句,添加新列,总和列。
    pandas 新增列非常简单,df[新列名字]=新列值,即可
  • df.loc[:,’语文’:’生物’] ,是获取语文到生物之间的列的数据
  • .sum(axis=1) ,横向求和。
    因为 pandas 可以灵活对行或列做运算,通过 axis 即可表达运算是对行还是列操作。
  • 第二句即查询,通俗易懂

    6.嵌套逻辑关系符

    640 (4).webp

  • query 中的查询字符串可以使用 python 中的逻辑关键字 and 或 or 这些都可以


4、模糊筛选

  1. 筛选首字母A的数据

利用Pandas处理Excel数据 - 图15

  • 血型 列是文本类型,因此可以用 .str ,从而使用一系列文本快捷方法
  1. “住址内容包含 天津市 3字”的记录。如下:
  1. ![](https://cdn.nlark.com/yuque/0/2020/png/680774/1578985128582-f69e1d8d-22d3-4484-a88c-3380cb63693f.png)


  1. “住址内容有 x座 ,x是字母a至c,大小写都算”

利用Pandas处理Excel数据 - 图16

  • contains 方法可以用正则表达式
  • contains 函数用法

    Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)是否包含查找的字符串 参数: pat : 字符串/正则表达式 case : 布尔值, 默认为True.如果为True则匹配敏感(大小写敏感) flags : 整型,默认为0(没有flags) na : 默认为NaN,替换缺失值. regex : 布尔值, 默认为True.如果为真则使用re.research,否则使用Python 返回值: 布尔值的序列(series)或数组(array)

(二)高级筛选

640 (5).webp

  • 总分高于平均分的学生

640 (6).webp

  • 总分高于所在班级平均分的学生
  • .groupby(‘班级’) ,按班级分组

    groupby 用法

  • .apply ,对每组查询总分超出平均分的记录。这里的 query 字符串与上一例子是一样的

    apply用法

高于各科平均书.webp

  • 定义一个方法,这有利于重用逻辑
  • 前2句,先求出每科平均分
  • 然后求出每位学生高于平均分的科目数量 count
  • 最后简单判断一下,即可得到结果

640 (7).webp

  • 调用函数,求出全级8科成绩均大于平均分的学生

640 (8).webp

  • 按班级分组,每班中8科成绩均大于平均分的学生

640 (9).webp

  • 添加参数”sjs”
  • “8科成绩都低于班内平均水平的学生”