《利用python进行数据分析》第八章连接联合与重塑(笔记)

连接联合与重塑

一、 分层索引:在一个轴上有多个索引层级

  1. 用列表创建分层索引: data=pd.Series(np.random.randn(9),
    index=[[‘a’,‘a’,‘a’,‘b’,‘b’,‘c’,‘c’,‘d’,‘d’],[1,2,3,1,3,1,2,2,3]])
    在这里插入图片描述

  2. 分层索引:与普通索引一样: 轴索引 data.loc[第一层级,第二层级,第三层级….]
    data[‘b’]#取第一层级的“b‘列 data.loc[:,2:4] #取第一层级的全部行和第二层级的2-4行
    在这里插入图片描述在这里插入图片描述

  3. 取消分层索引: unstack()
    data.unstack() 在这里插入图片描述 data.unstack().stack()在这里插入图片描述

  4. 在列轴上也能创建分层索引,方法一样 columns=[[……][……]]

  5. 对层级命名:data.index.names=[‘key1’,’key2’]

  6. 层级排序: 对调两个层级的顺序用swaplevel
    data.swaplevel(‘key1’,’key2’) 对调key1和key2的位置,
    data.swaplevel (0,1) 对调第0层级和第1层级的位置

  7. 层级排序 按第0层级进行排序 data.sort_index(level=0,axis=0)

  8. 使用某一列作为索引:set_index
    让某一列变成索引: data2=data.unstack().set_index(2) #把‘2‘这一列拿出来作为索引
    在这里插入图片描述
    使用reset_index可以取消分层data.unstack().reset_index(2)

二、 联合merge (P226) merge(df1,df2,left_on,right_on,left_index,right_index,how,on….)

  1. 将两个DataFrame进行联合并合并: pd.merge(df1,df2,on=’key’)
    df1和df2根据key列进行联合,相同的值会合并在一起,这里默认是内连接,即只显示他们的公共部分,交集
  2. 两个表的列名不相同,进行合并时需要指出通过哪个列联合
    pd.merge(df1,df2,left_on=’key1’,right_on=’key2’) 左表df1的连接键是key1,右边表df2连接键是key2
  3. 规定连接的方式 pd.merge(df1,df2,on=’key’,how=’outer’)
    一般默认内链接,outer -外连接 left-左连(也就是包含左表的所有行)right-右连
  4. 如果连接键不同,就会形成多对多的连接,产生笛卡儿积
  5. 多个键进行联合时,可以给连接键传入一个列表
    Pd.merge(df1,df2,on=[’key1’,’key2’],how=’outer’)
  6. 把索引当作连接键来进行合并: left_index=true 表示左表的索引为连接键
    pd .merge(df1,df2,left_index=true, right_on=’key’) 连接键是左表的索引和右边的key列
  7. 根据多个索引进行合并:用join
    Df1.join(df2) 表示根据df1和df2的索引进行连接合并
    Df1.join([df2,df3]) 表示根据df1、df2、df3的索引进行合并,等同于concat
    三、 表的连接concat(obj,axis,join,keys,names,ignore)
  8. 将多个表按行或者按列拼接在一起:
    pd.concat([s1,s2,s3],axis=0) j将s1,s2,s3按行方向拼接在一起
    axis=1 按列方向拼接在一起
  9. 指定连接的方式:join 默认是外连 join=’inner’ 内连
    pd.concat([s1,s2,s3], join=’inner’) #之连接相同的行列(内连接)
  10. 指定用于拼接的轴:
    pd.concat([s1,s2,s3], join_axes=[‘a’,’c’,’b’]) 拼接时值会出现a’,’c’,’b三行
  11. 连接后创建分层索引,可以使用set_index命令,也可以使用concat的内置参数keys:
    pd.concat([s1,s2,s3],axis=0, keys=[‘one’,’two’,’three’]) 表示在行方向上创建一个one’,’two’,’three的第0层级的分层索引
    pd.concat([s1,s2,s3],axis=1, keys=[‘one’,’two’,’three’]) 表示在列方向上创建一个one’,’two’,’three的分层索引
    同时可以使用names命名生成的轴层级:pd.concat([s1,s2,s3],axis=1, keys=[‘one’,’two’,’three’],names=[‘upper’,lower’])
  12. 无相关性连接: ignore_index=true df1和df2不沿着轴保留索引,而是产生一段新的索引(长度为df1和df2的长度之和)
  13. 联合重叠数据(通过连接两个表来修补缺失值:) a.combine_first(b)
    两表的结构相似时,进行联合,相同的部分重叠,缺失的部分补齐

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
四、 重塑与透视

  1. 堆叠:stack() 将列标签透视到行轴上去,实质是将列标签作为一个分层索引,
    在这里插入图片描述 在这里插入图片描述
  2. 拆堆:unstack() 将行标签透视到列轴上,实质是取消分层索引,默认情况是从内层开始拆,也可以传入层级序号来选择拆堆的层级 eg:unstack(0) #拆除第0 层级
    在这里插入图片描述 在这里插入图片描述
  3. 拆分有可能会产生缺失值,而堆叠一般会过滤缺失值,传入参数dropna=False将不会过滤缺失值 : data.stack(dropna=False)
  4. 将“长”表透视为“宽”表 P240:pivot(要作为行索引的列,要作为列索引的列,填充值)
    将一列变换为多列,类似于数据透视表,重建索引轴
    eg: data=ldata.pivot(‘date’,item’,’value’) #‘date为行标签,item为列标签,填充value
    pivot的方法等价于set_index创建分层索引,然后再调用unstack将一个索引层返回到列上: data=ldata.set_index([‘date’,item’]).unstack(‘item’)
  5. 将“宽”表透视为“长”表 P242: pd.melt(需要变换的表,[分组指标])
    将多列合并成一列,实质是按照某一列的值分组,
    eg: data2=pd.melt(df,[‘key’]) #将key列作为分组指标

区分:

  1. stack和set_index:
    (1)stack是堆叠,将列标签透视到行轴上,创建一个分层索引
    (2)set_index也可以创建分层索引,但是是将某一列的值作为分层索引
  2. unstack和reset_index:
    (1)unstack是取消分层索引,将拆除的列返回在列轴上
    (2)reset_index也是取消某一列的分层索引,将拆除的列返回在列数据值当中,而不是标签上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值