windows超级终端-电驴怎么用啊
2023年4月2日发(作者:rar)
Pandas分类总结之:索引
⽂章⽬录
1.索引器
1.1表的列索引
df[列名],返回值为Series,当列名不包含空格,可⽤df.列名取出
df[[列名组成的列表]],返回值为DataFrame
1.2序列的⾏索引
1.以字符串为索引的Series
s[item],若单个值对应,则返回这个标量值,如果有多个值对应,则返回⼀个Series
s[[item的列表]],返回⼀个Series
s[start:end:step],如果是唯⼀值的起点和终点字符才可以使⽤切⽚,且包含两个端点;如果不唯⼀,需要排序后才可使⽤切⽚
2.以整数为索引的Series
s[int],若单个值对应,则返回这个标量值,如果有多个值对应,则返回⼀个Series
s[[int的列表]],返回⼀个Series
s[start:end:step],整数切⽚,两个索引不允许有重复值,取出对应索引位置的值,不包含右端点
1.3loc索引器
[*,*]基于元素的loc索引器,第⼀个*代表⾏的选择,第⼆个*代表列的选择,如果省略第⼆个,就是⾏筛选
*位置⼀共有五类合法对象,分别是:
[单个元素]
eg1:['row_name']或['col_name'],如果该元素在索引中重复则结果为DataFrame,否则为Series
eg2:['row_name','clo_name'],如果该元素在索引中重复则结果为Series,否则为单个元素
[元素列表]
eg1:[['row_name1','row_name2',...],['clo_name1','clo_name2',...]],取出列表中所有元素值对应的⾏或列
[元素切⽚]
eg1:['row_namex':'row_namey','clo_namex':'clo_namey'],字符切⽚,如果是唯⼀值的起点和终点字符才可以使⽤切⽚,且包
含两个端点
eg2:[3:5],整数切⽚,如果是唯⼀值的起点和终点数字才可以使⽤切⽚,且包含两个端点
[布尔列表]
传⼊loc的布尔列表要与DataFrame长度相同
eg1:[_name>num]
eg2:[_(['name1','name2'])]
eg3:[condition1&condition2],复合条件可⽤|(或),&(且),~(取反)的组合来实现
[函数]
函数结果必须以前⾯的四种合法形式之⼀为返回值
eg1:[funcation(x)],函数的形式参数x本质上即为df_demo
eg2:[lambdax:'name1',lambdax:'name2']
select_dtypes#从表中选出相应类型的列
eg1:_dtypes('number'),选出所有数值型的列
1.4iloc索引器
[*,*]基于位置的iloc索引器,第⼀个*代表⾏的选择,第⼆个*代表列的选择,如果省略第⼆个,就是⾏筛选
*位置⼀共有五类合法对象,分别是:
[整数]
eg1:[1,1],第⼆⾏第⼆列
[整数列表]
eg1:[[0,1],[0,1]],前两⾏前两列
[整数切⽚]
eg1:[1:4,2:4],切⽚不包含结束端点
[布尔列表]
eg1:[(_name>num).values],不能传⼊Series⽽必须传⼊序列的values
[函数]
eg1:[lambdax:slice(1,4)]
1.5query⽅法
把字符串形式的查询表达式传⼊query⽅法来查询数据,其表达式的执⾏结果必须返回布尔列表。
eg:
#eg1:
('((School=="FudanUniversity")&'
'(Grade=="Senior")&'
'(Weight>70))|'
'((School=="PekingUniversity")&'
'(Grade!="Senior")&'
'(Weight>80))')
#eg2:
('Weight>()')
注意:
对于含有空格的列名,需要使⽤colname的⽅式进⾏引⽤
条件关系可⽤or,and,or,in,notin,eg:('(condition1)and(condition2)')
字符串中出现与列表的⽐较时,==等价于in、!=等价于notin,eg:('clo_name==["name1","name2"]')
引⽤外部变量,只需在变量名前加@符号
1.6随机抽样
(n,#抽样数量
axis,#抽样⽅向
frac,#抽样⽐例
replace,#是否放回
weights#抽样相对概率)
2.多级索引
2.1多级索引和表的结构
索引中的⼀个元素是元组⽽不是单层索引中的标量
df_/values,获取⾏索引名字/值属性
df_/values,获取列索引名字/值属性
df__level_values(0),获取某⼀层的索引
2.2多级索引中的loc索引器
loc和iloc⼀样使⽤,只需把标量的位置替换成对应的元组即可,但需要先进⾏df__index()(索引排序)以避免性能警告。
eg1:df_[('row_name1','row_name2')]
eg2:df_[[('row_name1','row_name2'),('row_name3','row_name4')]]
eg3:df_[df__name1>70]
eg4:df_[lambdax:('row_name1','row_name2')]
eg5:df_[('row_name1','row_name2'):],切⽚索引,⽆论元组在索引中是否重复出现,都必须经过排序才能使⽤切⽚
eg6:df_[(['row_name1','row_name2'],['row_name3','row_name4']),:],可以对多层的元素进⾏交叉组合后索引,同时需要指
定loc的列(全选则⽤:表⽰)
2.3IndexSlice对象
Slice对象⼀共有两种形式,第⼀种为loc[idx[*,*]]型,第⼆种为loc[idx[*,*],idx[*,*]]型,需要先定义idx=lice,才能使⽤slice,
loc[idx[*,*]]
eg1:df_[idx['C':,('D','f'):]],前⼀个*表⽰⾏的选择,后⼀个*表⽰列的选择
eg2:df_[idx[:'A','b':],idx['E':,'e':]],,前⼀个idx指代的是⾏索引,后⼀个是列索引
2.4多级索引的构造
_tuples(my_tuple,names=['First','Second']),根据传⼊由元组组成的列表进⾏构造
_arrays(my_array,names=['First','Second']),根据传⼊列表中,对应层的列表进⾏构造
_product([my_list1,my_list2],names=['First','Second']),根据给定多个列表的笛卡尔积进⾏构造
3.索引的常⽤⽅法
3.1索引层的交换和删除
索引层的交换
df_vel(0,2,axis=1).head(),只能交换两个层,列索引的第⼀层和第三层交换
df_r_levels([2,0,1],axis=0).head(),可以交换任意层,列表数字指代原来索引中的层
索引层的删除
df_vel(1,axis=1),删除某⼀层的索引
df_vel([0,1],axis=0),删除某些层的索引
3.2索引属性的修改
索引层的名字修改
df__axis(index={'row_old':'row_new'},columns={'col_old':'col_new'}),索引层的名字进⾏修改,修改⽅式是传⼊字典的映射
索引层的值修改
df_(columns={'cat':'not_cat'},level=2),对索引的值进⾏修改,如果是多级索引需要指定修改的层号level
df_(index=lambdax:(x),level=2),传⼊参数也可以是函数,其输⼊值就是索引元素
map函数,定义在Index上的⽅法,直接传⼊索引的元组,进⾏跨层的修改提供了遍历
new_idx=df_(lambdax:(x[0],x[1],(x[2])))
new_idx=df_(lambdax:(x[0]+'-'+x[1]+'-'+x[2])),对多级索引的压缩
new_idx=df_(lambdax:tuple(('-'))),索引反向地展开
3.3索引的设置与重置
set_index()索引的设置
_index('row_name',append=True),其主要参数是append,表⽰是否来保留原来的索引,直接把新设定的添加到原索引的内层
_index(['row_name1','row_name2'])
_index(['row_name1',my_index]),在参数中可以传⼊相应的Series作为索引
reset_index()索引的重置
_index(),重置了所有的索引,重新⽣成⼀个默认索引
_index('row_name',drop=True),其主要参数是drop,表⽰是否要把去掉的索引层丢弃,⽽不是添加到列中
3.4索引的变形
df_x()
4.索引运算
4.1⼀般的索引运算
先⽤unique去重后再进⾏运算
ection(df2),取索引交集
(df2),取索引并集
ence(df2),取索引差
ric_difference(df2),取索引补
更多推荐
idx
发布评论