python层次化索引例子_pandas中层次化索引使用规则总结

pandas中层次化索引使用规则总结

作为一个初学python的小白,学习pandas的层次化索引时,被各种[],()的组合搞晕了,网上很多文章只是按书上的例子摘录,对于原理或规则的讲述很少,使用时往往难以掌控,经过多次尝试和验证,发现了其中一些规律,欢迎大家一起验证一下。

一些基本规则

1、在[]内嵌套使用[]或()时,内嵌的[]表示同一个轴向上同一个层级的索引,内嵌的()表示同一个轴向上不同层级(层次化索引中经常用到);

2、[][]并列使用表示在前一个[]的结果中再次执行[],即按顺序选取子集;

3、使用层次化索引时,必须依层级指定标签,不允许跳过上一层级的,直接选取低层级。

Series选取子集时:

1、Series“没有列”,不存在列索引,所以[]中只能使用行索引,直接选取或使用loc选取的用法是一样的,以下以loc选取为例;

2、选取不同层级的行标签轴,每个层级只含一个标签的格式

ser.loc[row_index_level_1,row_index_level_2,…,row_index_level_n];

3、选取不同层级的标签轴,每个层级含多个索引时,用内嵌的[]把同一个层级的行索引括起来

ser.loc[[row_index_level_1_1,row_index_level_1_2],…,row_index_level_n_n]

4、Series“没有列”,这里不同层级之间的索引都是行索引,所以不需要使用()把不同级别的行索引包含起来去跟列索引区分;

5、iloc的使用参照DataFrame中的说明。

DataFrame选取子集时(不使用loc或iloc):

1、允许使用列索引或行切片,不允许使用行索引(选取行时需要借助loc用行标签索引选取,或借助iloc用行序号索引选取),所以使用[][]格式时,第二个括号仅允许行切片或列索引(注意不能同时选取),这常常会导致loc或iloc使用[][]时报错(loc或iloc只会作用于紧挨着的第一个[])!

2、当列是层次化索引时,必须依层级指定标签,不允许跳过上一层级的,直接选取低层级,可以使用data[col_level_1][col_level_2][col_level_3]的格式,或data[col_level1,col_level2,col_level3]的格式。

DataFrame选取子集时(使用loc或iloc):

loc用法:

1、选取不同层级的标签轴,每个层级只含一个标签的格式

[(row_index_level_1,row_index_level_2,…,row_index_level_n),(col_index_level_1,col_index_level_2,…,col_index_level_n)]

可以试试[][][]的形式,注意loc只对一个[]有效,后面的[]相当于直接对DataFrame使用,需考虑DataFrame直接选取子集时的注意事项。

2、选取不同层级的标签轴,每个层级含多个标签的格,用内嵌的[]把同一层级的多个索引括起来

[([row_index_level_1_1,row_index_level_1_2],…,row_index_level_n),([col_index_level_1_1,col_index_level_1_2],…,col_index_level_n)]。

iloc用法:

1、只能指定最低层级的索引序号,指定单个序号或连续的区间的格式

[row_index_leveln,dex_leveln];

2、每个轴向上需要指定多个序号时,用内嵌的[]把同一层级的多个索引括起来:[[row_index_level_n_1,row_index_level_n_3,row_index_level_n],[colindex_level_n_1,colindex_level_n_3,colindex_level_n_n]]

3、[(),()]格式的用法是不合法,因为iloc只能对最低层级进行选取,不支持层级选取。

---------鉴于pandas不能自由的选择行列索引,嵌套使用[]或()或组合使用[][]时容易触犯上述的限制导致报错,因此选取子集的时候,尽量使用loc或iloc---------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值