windows超级终端-电驴怎么用啊

idx
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