一、索引
索引的主要作用是对数据做切片,能够从pandas的对象中选取数据子集。
1、loc: 基于数据标签,如果标签值不存在,会抛出KeyError
-
单个的标签值
-
列表或者数组的标签值
-
切片范围数据 (基于索引名称,不属于前闭后开!)
-
布尔型的数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # df.loc[ 行操作 , 列操作 ]
# 1、单个的标签值
df.loc[ ' 标签名称 ' ]
# 2、列表或者数组的标签值
df.loc[ [ 0 , 1 , 2 ] , : ]
df.loc[ [ 0 , 1 , 2 ] , [ 'color' , 'director_name' ,] ]
# 3、切片范围数据
df.loc[ 0 : 4 , : ]
# 4、布尔型的数组
df.loc[ [ True , False , True ] , : ] # False 不显示该条数据
df.loc[ df[ 'duration' ]> = 150 ,:]
|
2、iloc:基于整数位置,如果整数超出了索引范围,会抛出IndexError
-
一个整数
-
列表或者数组的整数
-
整数切片
-
布尔型数组
1 2 3 4 5 6 7 8 9 10 11 | #1、一个整数
df.iloc[ 0 , : ]
#2、列表或者数组的整数
df.iloc[ [ 0 , 1 , 2 , 3 ] , : ]
#3、整数切片 前闭后开
df.iloc[ 0 : 4 , : ]
#4、布尔型数组
df.iloc[ [ True , False , ] , : ]
|
3、ix:loc与iloc混合使用
4、应用:条件筛选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 1. 筛选条件 , bool 数组
df_new[ 'director_facebook_likes' ] > = 100
# 2. 条件组合 , 注意括号
( bool 数组 ) & ( bool 数组 ) & ( bool 数组 )
# 3. 应用
df.loc[ ( bool 数组 ) & ( bool 数组 ) & ( bool 数组 ) ]
# 4. 符合条件 进行标记
df.loc[ (...) & (...) & (...) , ' 新列名' ] = 1
# 5. 标记不符合的数据 => 条件取反~(...) ,注意括号
df.loc[ ~( (...) & (...) & (...) ), ' 新列名' ] = 0
### 方式二 :
df.query( " 条件 & 条件 " )
df.query( " aa >= 100 " )
|
5、其他
1 2 | isin 方法
Series.isin( [ '...' , '...' ] )
|
二、设置索引方法:
1.索引必须在数据集里面,不能外部引入
1 2 3 4 5 6 7 8 9 | df.set_index([ '列名' , '...' , ])
df.set_index([ [ 0 , 1 , 2 , 3 ] ])
keys : column label or list of column labels / arrays
drop : 默认 True ,成为索引后,删除原数据列
append : 默认 False ,追加索引,删除原索引
inplace : 默认 False ,返回新数据集,不修改原数据集
verify_integrity : boolean, default False
Check the new index for duplicates. Otherwise defer the check until necessary. Setting to False will improve the performance of this method
|
2.reset_index 设置索引的逆操作
1 | df.reset_index( [ 'xxx' , 'xxx ' ] )
|
三、多重索引
多重索引适用于复杂的数据分析,尤其适用于高纬度的数据
多重索引能够允许你进行分组,选取以及重塑等操作
loc 默认搜索第一层索引,形式上只能写一个逗号
多重索引形式:
1 | df.loc[ '第一层索引名称' , '第二层索引名称' , '...' ]
|
显示特定列:(索引处利用元组形式)
1 | df.loc[ ( '第一层索引' , '第二层索引' , '...' ) , ]
|
多个索引值:(需要先对DataFrame进行排序)
1 | df.loc[ ( '第一层索引' , [ 'xxx' , 'xxx' ] ) , ]
|
排序操作:
1 | df.sort_index(inplace = True ) # True对原数据集进行修改
|

sort_index()
利用Slice() 进行区间索引(表示选取一个范围内的元素):
-
必须制定所有轴上面的元素
-
必须对索引进行排序
-
使用slice函数
1 2 3 4 5 | # slice(None) 表示选取全部元素
# slice('a' , 'z') 表示选取a~z间元素
df.loc[ ( slice ( None ) , slice ( 'Australia' , 'Canada' )) , ]
df.loc[( slice ( None ) , slice ( 'Australia' , 'Canada' )) , slice ( 'color' , 'duration' ) ]
|
IndexSlice 利用idx代替Slice
1 2 3 4 5 6 7 8 | df1.loc[( slice ( None ), slice ( 'Australia' , 'Canada' )),]
idx = IndexSlice
df1.loc[ idx[ : , [' 'Australia' , 'Canada' '] ] , ]
# : => slice(None) 表示选取全部元素
df.loc[( slice ( None ) , [ 'USA' ] , slice ( 100 , 200 ) ),]
df.loc[ idx[: , [ 'USA' ] , 100 : 200 ] , : ] # ['...' , '...']表示或 , 区间表示用 :
|
根据 横纵轴返回数据集(选取某行或者某列)
1 2 3 4 5 6 7 8 | df.xs 指定level 进行索引选取
level : 0 / 1 / 2 代表索引 , 即接收文本型,也接收整数型
asix : 0 / 1 控制轴 0 纵轴 , 1 横轴
drop_level 默认 True 删除自己level
df.xs( 1 ,axis = 0 )
df.xs( 'xx' , level = '索引列名' , drop_level = False ) 单个
df.xs( ( 'xx' , 'xxxx' ), level = ( 0 , 1 ) , drop_level = False ) 多个元素 , 一 一对应
|
四、多表操作
多表操作示例

View Code
1、pd.concat() 返回新数据集
1 2 3 4 5 6 | pd.concat( [ ... , ... , ] )
axis : 默认 0 按index , 1 按columns
ignore_index : 忽视以前的索引 , 随着axis 轴命名从 0 ~ n - 1
pd.concat([df1,df2,df3])
pd.concat([df1,df2,df3] , axis = 0 , ignore_index = False )
|
2、两表组合

操作示例
pd.merge() 每次只能组合两张表
1 2 3 4 5 6 7 8 | # pd.merge( left,right)
how : 默认inner , left ,right,outer
suffixes = ( '_left' , '_right' ) # 修改列名_x , _y名字
pd.merge(left,right,how = 'inner' ,on = 'key1' )
pd.merge(left,right,how = 'left' ,on = 'key1' )
pd.merge(left,right,how = 'right' ,on = 'key1' )
pd.merge(left,right , on = [ 'key1' , 'key2' ])
|
rename() 修改列名,返回新数据集
1 | left1 = left.rename(columns = { "key1" : "key1_l" , "key2" : "key2_l" })
|
注意:
1 2 3 4 5 6 7 8 | # left_index = True 索引作为key 去join
left_index : boolean, default False
Use the index from the left DataFrame as the join key(s). If it is a
MultiIndex, the number of keys in the other DataFrame (either the index
or a number of columns) must match the number of levels
right_index : boolean, default False
Use the index from the right DataFrame as the join key. Same caveats as
left_index
|
|