知行编程网知行编程网  2022-08-05 08:00 知行编程网 隐藏边栏 |   抢沙发  9 
文章评分 0 次,平均分 0.0

只需8招,搞定Pandas数据筛选与查询

今天聊聊Pandas数据筛选与查询的一些操作,在数据分析的过程中通常要对数据进行清洗与处理,而其中比较重要和常见的操作就有对数据进行筛选与查询。

目录:

  • 1. 案例数据预览
  • 2. 基础操作
    • 2.1. 切片[]
    • 2.2. 索引选择.iloc与.loc
    • 2.3. 元素选择.iat与.at
    • 2.4.  get与truncate
  • 3. 进阶操作
    • 3.1. 逻辑筛选
    • 3.2. 函数筛选
    • 3.3. query
    • 3.4. filter

 

1. 案例数据预览

只需8招,搞定Pandas数据筛选与查询

本次案例,我们继续采用之前用到过的各地区GDP数据,数据信息大致如下,后台回复GDP可以获取哈。

我们看看描述统计情况,然后在后续做筛选查询的时候好演示

可以看到,有效数据有30多条,为了让数据显示好一点,我们可以设置最多显示6行

接下来,我们开始演示数据的筛选与查询吧

 

2. 基础操作

只需8招,搞定Pandas数据筛选与查询

一般来说,数据筛选有选择行、列或者指定位置的值等

2.1. 切片[]

切片这玩意就和python的列表数据的切片操作很相似

选择某一列

注意:如果列名为 2020年或者2020 年,则无法采用属性形式,因为这种操作的变量名不能以数字开头或存在空格

切片操作

  • 切片里是索引位置,筛选的是对应的行
  • 同样如果我们在切片里是列名组成的列表,则可以筛选出这些列
  • 对于只有一列的情况,切片[]是列名构成的列表返回结果类型分别是DataFrame,反之则是Series

2.2. 索引选择.iloc与.loc

按照索引有两种筛选方式,ilocloc

  • df.iloc[行表达式, 列表达式],两个表达式只支持数字切片形式:行表达式筛选行、列表达式筛选列
  • df.loc[行表达式, 列表达式],两个表达式其实是对行列索引名称的选择:行表达式筛选行、列表达式筛选列

当然,这两种筛选方式的表达式也支持条件

iloc[]

大家可以根据方法名称来区分是针对自然索引位置 还是 索引名称,比如iloc多个i嘛,i就是数字码,所以它针对的是自然索引位置

loc[]

区别于iloc,它根据索引的名称来进行筛选,如果没有设置索引一般就是自然索引

2.3. 元素选择.iat与.at

按坐标其实可以通过上述的按索引进行,这里还可以用.iat.at来实现,和按索引类型一个是自然索引值一个是索引名称

2.4.  get与truncate

df.get(key, default=None)类似python字典里的get方法

df.truncate(before=None, after=None, axis=None, copy: 'bool_t' = True),返回区间数据

get()

对于DataFrame数据来说返回key列的值,如果key不存在就返回默认值。

对于Series数据来说,返回key索引的值,不存在就返回默认值。

truncate()

将索引代入beforeafter,截取这区间的数据,支持对行和列操作

以上属于数据筛选与查询的基础操作,接下来我们介绍进阶操作

 

3. 进阶操作

只需8招,搞定Pandas数据筛选与查询

基础操作部分我们介绍的是比较简单的数据筛选操作,实际的数据清洗与处理时我们更多的是需要根据更加复杂的组合条件来查询数据进行筛选。这一节,我们就来一一介绍一下。

3.1. 逻辑筛选

逻辑刷选这里是指按照一定的逻辑条件来进行数据的筛选,比如满足某条件的行、列数据等等

除了上面用切片[]的形式,同样可以用loc[]的形式

对于iloc[]来说,则需要是对自然索引值的判断

我们还可以进行更复杂的逻辑判断去筛选想要的数据,在进行 或(|) 且(&) 非(~) 逻辑判断的时候,每个独立的逻辑判断需要用括号括起来

我们还可以通过anyall对逻辑判断后结果进行再次判断,对于all来说需要都满足才行,对于any来说只需要满足一个即可,需要注意的是默认是0列方向,1是行方向

3.2. 函数筛选

函数筛选是指 我们在不管是切片还是索引选择方式中,表达式还可以是lambda函数;此外,pandas也提供了一些比较函数可以用来进行数据筛选。

自定义lambda函数

比较函数

panda有一些比较函数,我们可以将逻辑表达式替换为比较函数形式

对于isin(),还可以传入字典,key为列名,value为待匹配的值(这个大家可以构建数据试试)

3.3. query

query()的很高校的查询方法,其表达式是一个字符串,我们在《再推荐几个好用的pandas函数,继续加快你数据处理的速度》介绍过,大家可前往了解,这里稍微介绍下

  • 在引号中,如果列名是数字开头或者含有空格,则需要用`反引号标识
  • 其他情况下的列名直接写即可,用于筛选对比的对象如果是字符串则需要用引号
  • 我们还可以通过@来引入变量

3.4. filter

df.filter()可以对行和列名进行筛选,支持模糊匹配和正则表达式

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享