Python库Pandas《Pandas Cookbook》第05章 BOOL

系统 1850 0

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

文章目录

  • 1.计算BOOL值统计信息
  • 2.构建多个BOOL条件
  • 3.用BOOL索引过滤
  • 4.用标签索引代替BOOL索引
  • 5.用唯一和有序索引选取
  • 6.观察股价
  • 7.翻译SQL的WHERE语句
  • 8.确定股票收益的正态值
  • 9.使用查询方法提高BOOL索引的可读性
  • 10.用where方法保留Series
  • 11.对DataFrame的行做mask
  • 12.使用BOOL值、整数、标签进行提取

1.计算BOOL值统计信息

这段主要是先通过比较运算,将DataFrame和Series内的元素转为BOOL类型,然后再进行响应的运算,得注意一下value_counts(normalize=True)这个函数,本来是统计个数的,加上normalize参数后,就变为统计频率了,之前第01章也有用到
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第1张图片

2.构建多个BOOL条件

这段主要是多个条件比较,对应多个基于BOOL变量的数据结构,而多个BOOL条件也可以用位运算符组合
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第2张图片

3.用BOOL索引过滤

结合BOOL条件,DataFrame之类的数据结构可以进行过滤,将符合BOOL条件的数据过滤出来
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第3张图片

BOOL条件也可以结合loc来进行过滤
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第4张图片

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

这段先是设置索引,然后通过loc来对相应的索引进行选择,对比运行时间,虽然设置索引会很费时间,但是索引只用设置一次,后面用loc来操作就快了
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第5张图片

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

对比四种索引方式的运行时间——BOOL索引、无序行索引、有序行索引、唯一行索引,如果不算前期处理操作,四种索引方式的消耗时间依次减少
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第6张图片
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第7张图片
在这里插入图片描述

6.观察股价

选取股票收盘价最高和最低的10%
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第8张图片

用了matplotlib中的plot()和hlines()函数——先用plot()将所有的收盘价在坐标轴中用黑色曲线绘制,然后用plot()单独将收盘价最高和最低的10%部分用灰色绘制,最后通过hlines()绘制水平直线,区分最高和最低的%10同其他区域
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第9张图片

这里不同于上面用曲线颜色来区分,主要是区域填充不同颜色来区分——fill_between()可以在指定区域内用不同的颜色来区分,先将所以区域用黑色填充,然后将最高和最低的10%区域用灰色填充
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第10张图片

7.翻译SQL的WHERE语句

这段没啥特殊,主要是看下导入数据的基本信息,有一个地方需要注意的是:列名也可以作为导入数据的属性,调用对应的属性名,可以获取对应列数据
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第11张图片

主要是解释下sql语句——先从EMPLOYEE表中选取薪水80000-120000的人住的DEPARTMENT(这里应该还少了WHERE条件,即过滤出80000-120000的人),然后将DEPARTMENT分组,并降序排列,选出前5条数据;之后将这5条数据的DEPARTMENT属性提取出来,然后从EMPLOYEE表中选取不属于这5个DEPARTMENT的数据
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第12张图片

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

这里主要涉及到了pct_change()函数——计算当前元素与先前元素相差的百分比,axis参数可以调整按行还是按列计算
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第13张图片

经过z-score处理后,数据其实进行了标准化,使得数据整体分布符合标准正态分布
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第14张图片

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

查询语句逻辑上有点类似于人脑的查询逻辑,都是很直白的表述,只是如果要用到变量,就需要@符号来获取变量的值
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第15张图片

10.用where方法保留Series

当我们用BOOL条件作为索引时,如果是[]运算符索引,索引出的数据会去掉符合False条件的数据,size可能比原数据小;如果用where()函数索引,索引除的数据会将符合False条件的数据用缺失值NaN代替,size和原数据一样大,如果不想用NaN代替,可以设置other参数,用指定的数据代替
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第16张图片

clip()函数效果等同于上面BOOL条件索引和where()的结合
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第17张图片

11.对DataFrame的行做mask

mask()函数会得到BOOL条件中符合False的结果,注意看BOOL条件,以及输出结果中title_year的数值
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第18张图片

通过BOOL条件,选出和mask一样的结果,但是两者结果不等,shape一样,因为mask方法会产生许多缺失值NaN,而NaN是不等于本身的,且数值类型的NaN统一变为浮点型
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第19张图片

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

Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第20张图片

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

loc是可以直接使用BOOL条件的,但是iloc是不能直接使用的
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第21张图片

但是iloc可以使用BOOL条件的array模式
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第22张图片

BOOL条件的values属性就是其对应的array模式了
Python库Pandas《Pandas Cookbook》第05章 BOOL索引_第23张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论