索引的主要作用是对数据做切片,能够从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混合使用
1 | df_new.ix[ 0 : 4 ,[ 'color' ]] |
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对原数据集进行修改 |
利用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 ) 多个元素 , 一 一对应 |
多表操作示例
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 |
联系客服