Python库Pandas《Pandas Cookbook》第05章 BOOL索引

这是书籍《Pandas Cookbook》书籍第05章的代码复现,所有代码运行在Jupyter Notebook上,原讲解地址是:
https://www.jianshu.com/p/d67080f59b06
我上传代码的github地址是:
https://github.com/Asunqingwen/PandasCookbook.git
github上有该书中用到的data,里面代码会不定期更新(因为工作原因,时间不定),直到本书学习完成!
相比原讲解,会穿插一些自己的理解,水平有限,请各路大神指正。

1.计算BOOL值统计信息

这段主要是先通过比较运算,将DataFrame和Series内的元素转为BOOL类型,然后再进行响应的运算,得注意一下value_counts(normalize=True)这个函数,本来是统计个数的,加上normalize参数后,就变为统计频率了,之前第01章也有用到
在这里插入图片描述

2.构建多个BOOL条件

这段主要是多个条件比较,对应多个基于BOOL变量的数据结构,而多个BOOL条件也可以用位运算符组合
在这里插入图片描述

3.用BOOL索引过滤

结合BOOL条件,DataFrame之类的数据结构可以进行过滤,将符合BOOL条件的数据过滤出来
在这里插入图片描述

BOOL条件也可以结合loc来进行过滤
在这里插入图片描述

4.用标签索引代替BOOL索引

这段先是设置索引,然后通过loc来对相应的索引进行选择,对比运行时间,虽然设置索引会很费时间,但是索引只用设置一次,后面用loc来操作就快了
在这里插入图片描述

5.用唯一和有序索引选取

对比四种索引方式的运行时间——BOOL索引、无序行索引、有序行索引、唯一行索引,如果不算前期处理操作,四种索引方式的消耗时间依次减少
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.观察股价

选取股票收盘价最高和最低的10%
在这里插入图片描述

用了matplotlib中的plot()和hlines()函数——先用plot()将所有的收盘价在坐标轴中用黑色曲线绘制,然后用plot()单独将收盘价最高和最低的10%部分用灰色绘制,最后通过hlines()绘制水平直线,区分最高和最低的%10同其他区域
在这里插入图片描述

这里不同于上面用曲线颜色来区分,主要是区域填充不同颜色来区分——fill_between()可以在指定区域内用不同的颜色来区分,先将所以区域用黑色填充,然后将最高和最低的10%区域用灰色填充
在这里插入图片描述

7.翻译SQL的WHERE语句

这段没啥特殊,主要是看下导入数据的基本信息,有一个地方需要注意的是:列名也可以作为导入数据的属性,调用对应的属性名,可以获取对应列数据
在这里插入图片描述

主要是解释下sql语句——先从EMPLOYEE表中选取薪水80000-120000的人住的DEPARTMENT(这里应该还少了WHERE条件,即过滤出80000-120000的人),然后将DEPARTMENT分组,并降序排列,选出前5条数据;之后将这5条数据的DEPARTMENT属性提取出来,然后从EMPLOYEE表中选取不属于这5个DEPARTMENT的数据
在这里插入图片描述

8.确定股票收益的正态值

这里主要涉及到了pct_change()函数——计算当前元素与先前元素相差的百分比,axis参数可以调整按行还是按列计算
在这里插入图片描述

经过z-score处理后,数据其实进行了标准化,使得数据整体分布符合标准正态分布
在这里插入图片描述

9.使用查询方法提高BOOL索引的可读性

查询语句逻辑上有点类似于人脑的查询逻辑,都是很直白的表述,只是如果要用到变量,就需要@符号来获取变量的值
在这里插入图片描述

10.用where方法保留Series

当我们用BOOL条件作为索引时,如果是[]运算符索引,索引出的数据会去掉符合False条件的数据,size可能比原数据小;如果用where()函数索引,索引除的数据会将符合False条件的数据用缺失值NaN代替,size和原数据一样大,如果不想用NaN代替,可以设置other参数,用指定的数据代替
在这里插入图片描述

clip()函数效果等同于上面BOOL条件索引和where()的结合
在这里插入图片描述

11.对DataFrame的行做mask

mask()函数会得到BOOL条件中符合False的结果,注意看BOOL条件,以及输出结果中title_year的数值
在这里插入图片描述

通过BOOL条件,选出和mask一样的结果,但是两者结果不等,shape一样,因为mask方法会产生许多缺失值NaN,而NaN是不等于本身的,且数值类型的NaN统一变为浮点型
在这里插入图片描述

利用pandas对象专有比较函数,就能判断mask和BOOL条件得出的两个对象是相等的
通过运行时间对比,利用BOOL条件索引的速度远远快于利用mask()函数的索引速度

在这里插入图片描述

12.使用BOOL值、整数、标签进行提取

loc是可以直接使用BOOL条件的,但是iloc是不能直接使用的
在这里插入图片描述

但是iloc可以使用BOOL条件的array模式
在这里插入图片描述

BOOL条件的values属性就是其对应的array模式了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值