这是书籍《Pandas Cookbook》书籍第04章的代码复现,所有代码运行在Jupyter Notebook上,原讲解地址是:
https://www.jianshu.com/p/bd0bc1b5b4b6
我上传代码的github地址是:
https://github.com/Asunqingwen/PandasCookbook.git
github上有该书中用到的data,里面代码会不定期更新(因为工作原因,时间不定),直到本书学习完成!
相比原讲解,会穿插一些自己的理解,水平有限,请各路大神指正。
文章目录
- 1.选取Series数据
- 2.选取DataFrame的行
- 3.同时选取DataFrame的行和列
- 4.用整数和标签选取数据
- 5.快速选取标量
- 6.惰性行切片
- 7.按照字母切片
1.选取Series数据
这段和第01章中Series的获取有点类似,主要是通过index和column_name进行行和列的选取,选取操作用到了iloc和loc函数——前者用整数或整数列表表示,后者用index或index的列表表示
或者直接用类似Python方法的dict和list切片用法,还可以像list那样反向切片
2.选取DataFrame的行
个人认为,这部分和第1部分讲的内容是一样的,都是通过iloc和loc函数选取DataFrame的行
3.同时选取DataFrame的行和列
这部分相对于之前的两部分,也就是在iloc和loc上使用的参数变为了二维的,所以可以同时选取行和列
4.用整数和标签选取数据
用整数和index结合column_name选取行和列,只是column_name对应的列数来源于get_loc(),index来源于index属性
5.快速选取标量
当我们指定index和column_name,那么就会获取唯一的值,也可以叫标量。可以用loc和iloc,也可以用获取标量的专有函数at和iat。
这部分最有趣的地方是用到了一个Python中的魔法函数——%timeit,这个函数会自动运行其后的语句多次,以计算平均运行时间,区别于%time,只计算当前运行一次的时间
6.惰性行切片
网上找了找,只有Python的generator部分有惰性的说法,即next()的时候才会开始计算下一个值,这里的惰性切片,我的理解就是——定义好合适的start,stop,step,一个接一个输出来,不用调用iloc或loc,内部实现可能就是基于generator的。
但是这样的惰性切片操作不适用于列,对于列只能用iloc和loc
7.按照字母切片
这部分感觉有点意思,用26个英文字母的顺序来进行切片,所以很明显得先基于索引排序,这样才使得索引列具有顺序意义,那么就能进行切片了,因为不排序,直接切片会产生如下错误:
ValueError: index must be monotonic increasing or decreasing
字面意思就是index必须单调递增或递减
排序后,index符合要求,就可以切片了,其中涉及到了两个检查字母排序顺序的属性,s_monotonic_increasing()和is_monotonic_decreasing,顾名思义,就是是否单调递增或单调递减