【有书共读】跟老齐学Python数据分析读书笔记04

二、访问

1. 索引对象

pandas 中的索引是单独设置成对象的,有 Index MultiIndex 两种,在创建Series或者DataFrame的时候可以指明index参数的值来自定义索引,默认生成从0开始的整数序列为索引值。索引支持切片操作,但是索引对象是不可变的,也就是说我们不能直接改变索引某一个位置上的值,修改索引必须重新赋值新的索引对象。


从上述过程我们可以发现pandas的索引对象很像一维数组,但他也像集合,因为它还支持集合的交、并、差操作,分别对应运算符 “&”“|”“-”



但在越来越信息化的时代,我们的数据仅用一维的索引已经无法描述,比如下面这个数据:




为此,pandas对于这样的数据建立了MulIndex对象来存储高维度索引,一般我们是通过把每一个索引项(包含各个维度上的取值)放在同一个tuple里,然后将所有的索引项按顺序放在list中,最后通过MultipleIndexfrom_tuples 将上述list中的tuple转换成高维度索引。

对于上述表格,可以这样为其创建索引:



除了from_tuples函数,还有from_arraysfrom_product两个函数也可以创建MultipleIndex对象,不过前者主要针对numpy.array,后者是通过笛卡尔乘积的方式,针对特定的情景使用不同的方法,或许会有奇效!具体使用可以参照下例:


注意到我们在输出MultiIndex对象的时候,levels存的只有是每一维度的取值集合,而真正的具体索引项是在labels参数中可以看出,最外面的list的第一个元素"[0, 0, 1, 1]",就是指第一维度的取值,“0“表示第一维度的第0号元素,也就是在之前levels中的对应部分的序号,以此类推,第二个list”[0, 1, 0, 1]“,其第一个”1“表示的是,第二维度的第1号元素,也就是”x2“


然而在实际生活中,多重索引有时候并不好理解,因为它们实际上还是在一个维度,比如在一维的Series中,具有多重索引的数据显示是这样的:



但是,如果我们用二维数据DataFrame去表示的话,结果是这样的:



显然,后者更加的清晰简洁,而pandas中的unstack函数,可以让我们将低维度数据、高维度索引 对象 变成 高维度数据、低维度索引 对象,自然而然,stack函数是其逆过程。


一般的,我们把垂直的部分叫做index(对应上图的“A” “B”),水平的叫做colums(对应上图的“x1” “x2”),在pandas中,可以不用去建立多重索引MultiIndex然后通过unstack函数转换成上述形式,而是可以通过直接指明colmns参数的值来达到同样的效果,如下图所示:


2.切片


切片的索引可以是整数(在pandas数据对象中的相对位置),也可以是自定义的index值(之前讲的内容),比如如下操作:



我们把切片的索引为整数的情况叫做位置索引,使用自定义的index叫做标签索引。看到这,大家可能会有疑问,如果标签索引也是整数怎么办?岂不是和位置索引冲突了吗?其实在python中,默认整数使用的是位置索引,为了方便用户区分以及使用特定的索引对象,特意写出了iloc函数和loc函数分别去使用位置索引和标签索引。

#Python##读书笔记##笔记#
全部评论

相关推荐

想按时下班的我在等offer:我投测试也是这个情况,不知道咋办了
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务