打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Python数据挖掘】第二篇
一、索引

索引的主要作用是对数据做切片,能够从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对原数据集进行修改
sort_index()

利用Slice() 进行区间索引(表示选取一个范围内的元素):

  1. 必须制定所有轴上面的元素

  2. 必须对索引进行排序

  3. 使用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

  

  

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
访问和提取DataFrame中的元素
pandas小记:pandas索引和选择
利用Python进行数据分析:【Pandas】(Series+DataFrame)
一文讲述Pandas库的数据读取、数据获取、数据拼接、数据写出
Python数据分析之Pandas学习笔记(很全包含案例及数据截图)
Python:loc和iloc的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服