中国统计网|一份【同时选择行列方法】的盘点送给你,Python拍了拍你


中国统计网|一份【同时选择行列方法】的盘点送给你,Python拍了拍你
文章图片
文末领取【Python基础知识思维导图】
前置知识补充:
布尔索引:指的是通过传入一个判断条件来选择数据的方式 , 称之为布尔索引
普通索引:通过选择行/列名来选择数据的方式 , 称为普通索引
位置索引:通过传入具体的位置来选择数据的方式称为位置索引
切片索引:通过传入一个位置区间来获取数据的方式 , 称为切片索引
#创建一个Serise——传入一个字典②d={'name':['qinlu','lulu','qinqin','junjun'],'sex':['male','male','female','male'],'age':[18,19,22,25]}s=pd.DataFrame(d,index=['A1','A2','A3','A4'])s--输出结果:namesexage方式一布尔索引+普通索引选择指定的行和列布尔索引+普通索引是先对表进行布尔索引选择行 , 然后通过普通索引选择列:
#case1:zjh-98s[s['age']<=22][['name','age']]--输出结果:nameageA1qinlu18A2lulu19A3qinqin22#找到符合条件的行——得到数据结构 , 其实本身也是个数据框#然后再在这个数据行下 , 选择我们需要的列即可 , 因此 , 就完成了 , 对指定行、列进行选择;#case2:#在以上基础上 , 只选择某一列 , 数据结构就变成了Series;s[s['age']<=22].name#行、列索引放在同一个中 , 对行列同时选择:s.loc[s['age']<=22,['name','age']]A3qinqin22注意需要使用loc , 不能使用iloc , 否则会出现以下报错:#英:ValueError:Locationbasedindexingcanonlyhave[integer,integerslice(STARTpointisINCLUDED,ENDpointisEXCLUDED),listlikeofintegers,booleanarray]types汉:基于位置的索引只能具有[整数 , 整数切片(起始点为INCLUDED , 结束点为EXCLUDED) , 类似整数的列表 , 布尔数组)类型讲完普通索引 , 我们再来讲 , 使用“切片索引+切片索引”来选择指定行和列的方式 。
方式二切片索引+切片索引选择指定的行和列切片索引+切片索引是同时传入行、列索引的位置区间进行数据选择 。
s.iloc[0:3,0:3]--常见错误1:s.iloc[[0:3],[0:3]]#位置索引注意需要使用iloc , 不能使用loc , 否则会出现以下报错:英:cannotdosliceindexingon<class'pandas.core.indexes.base.Index'>withtheseindexers[0]of<class'int'>;/汉:无法使用<class'int'>的这些索引器[0]在<class>上进行切片索引方式三切片索引+普通索引选择指定的行和列结论:新版本的JupyterNotebook , 目前已经不支持"ix"了!
如果是普通索引 , 就直接传入行或列名 , 用loc方法即可;如果是切片索引 , 也就是传入行或列名 , 用iloc方法即;如果是切片索引+普通索引 , 也就是行(列)用切片索引 , 列(行)用切片索引 , 列(行)用普通索引 , 看是否能够选择成功:
#case1:使用iloc发生报错s.iloc[0:3,['name','age']]--输出报错:#报错:英:IndexError:.ilocrequiresnumericindexers,got['name''age'];汉:iloc需要数字索引器 , 得到['name''age']#原因分析:当使用行(列)名称索引时 , 不能使用iloc方法;若使用iloc , 必须要求行或列都严格使用数字或者切片进行索引;#报错:英:TypeError:cannotdosliceindexingon<class'pandas.core.indexes.base.Index'>withtheseindexers[0]of<class'int'>/中:TypeError:无法使用<class'int'>的这些索引器[0]在<class>上进行切片索引#报错:英:AttributeError:“DataFrame”对象没有属性“ix”;/汉:AttributeError:“DataFrame”对象没有属性“ix”#原因分析:新版本的anconda目前已经不支持"ix"了!方式四位置索引+位置索引选择指定行和列#位置索引:选择第1,4行 , 第1,3列s.iloc[[0,3],[0,2]]--输出结果:nameageA1qinlu18A4junjun25#case1:索引超出s.iloc[[1,2],[2,3]]#报错:IndexError:positionalindexersareout-of-bounds/汉:IndexError:位置索引器超出范围;#case2:s.loc[[0,3],[0,2]]#报错:KeyError:"Noneof[Int64Index([0,3],dtype='int64')]areinthe[index]"/中文:KeyError:“[Int64Index([0 , 3] , dtype='int64')]都不在[索引]中”#原因分析:当使用位置索引+位置索引选择指定行和列时 , 需要利用iloc方法传入行列位置方式五普通索引+普通索引选择指定行和列#普通索引+普通索引就是通过同时传入行和列的索引名称进行数据选择 , 需要用到loc方法;s.loc[['A1','A2','A4'],['name','age']]--输出结果:nameageA1qinlu18A2lulu19A4junjun25#报错:s.iloc[['A1','A2','A4'],['name','age']];英文:IndexError:.ilocrequiresnumericindexers,got['A1''A2''A4']End.


推荐阅读