入门数据分析之数据重组

一、两数据合并concat

语法:pd.concat([data1,data2] [,axis=0,sort =True])
[Data1,Data2] —— 要连接的数据
axis —— 按轴的方向连接,默认 axis = 0,以行的方向↓
sort —— 以什么排序,=Ture是默认的,pandas总是默认index排序;

import pandas as pd
data1 = pd.Series([0,1,2],index=['A','B','C'])
data2 = pd.Series([3,4],index=['D','E'])
data3 = pd.concat([data1,data2])
print(data3)

在这里插入图片描述
在上面的例子中,我们分别创建了两个没有重复Index的Series,然后用concat默认的把它们合并在一起,这时生成的依然是Series类型,如果我们把axis换成1,那生成的就是Dataframe,像下面一样
在这里插入图片描述

相同字段的表,首尾相接

frames = [df1, df2, df3]
result = pd.concat(frames)

在这里插入图片描述

二、两数据合并 join

语法:data1.join(data2, other, on=None, how=‘left’, lsuffix=’’, rsuffix=’’,sort=False):

join方法将两个DataFrame中不同的列索引合并成为一个DataFrame参数的意义与merge基本相同,只是join方法默认左外连接how=left

import pandas as pd
dict1 ={'姓名1':['赵','钱','孙'],'年龄1':[127,80,20]}
dict2 ={'姓名2':['周','吴','李'],'年龄2':[176,152,128]}
left = pd.DataFrame(dict1)
right = pd.DataFrame(dict2)
print(left.join(right))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、两数据合并 append

append是series和dataframe的方法,使用它就是默认沿着行方向↓进行拼接,以字段为匹配
语法:result = df1.append(df2[,ignore_index =False])
Df1和df2 —— 要连接的数据;
ignore_index —— 是否忽略原index,默认=False不忽略;
在这里插入图片描述

四、两数据合并merage

首先merge的操作非常类似sql里面的join,实现将两个Dataframe根据一些共有的列连接起来,当然,在实际场景中,这些共有列一般是Id,
连接方式也丰富多样,可以选择inner(默认),left,right,outer 这几种模式,分别对应的是内连接,左连接,右连接,全外连接
语法:pd.merage(leftdata,rightdata,how = inner,on = 列名,)
leftdata — 以左表为主;
rightdata — 要连接的表;
★how — 以什么方式链接;
★on — 用来对齐的列名,要保证左表和右表存在相同的列名;

(1)通过on指定数据合并对齐的列

result = pd.merge(left, right, on=['key1', 'key2'])

在这里插入图片描述
(2)没有指定how的话默认使用inner方法,除了内连接,还包括左连接、右连接、全外连接

左连接:
 result = pd.merge(left, right, how='left', on=['key1', 'key2'])

在这里插入图片描述

右连接:
result = pd.merge(left, right, how='right', on=['key1', 'key2'])

在这里插入图片描述

全外连接:
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

在这里插入图片描述
五、堆叠和取消堆叠stack和unstack
如果原始数据集中的行列索引中均为层次索引,stack 过程表示将数据集的列旋转为行,同样 unstack 过程表示将数据的行旋转为列。
在这里插入图片描述
在这里插入图片描述
这些方法本质上是:
• stack:“透视”某个级别的(可能是多层的)列标签,返回带有索引的 DataFrame,该索引带有一个新的最里面的行标签。
• unstack:(堆栈的逆操作)将(可能是多层的)行索引的某个级别“透视”到列轴,从而生成具有新的最里面的列标签级别的重构的 DataFrame。
stack 过程将数据集的列转行,unstack 过程为行转列。
上例中,原始数据集索引有两层,堆叠过程就是将最列转到最内测的行上,unstack 是将最内层的行转移到最内层的列索引中。

五、分组与聚合

语法:df.groupby(by = None,axis = 0,level = None,as_index = True,sort = True,group_keys = True,squeeze = False,observe = False,** kwargs)[col].funcname
by — 分组字段,可以是列名/series/字典/函数,常用为列名;[多个列名需要用列表包含];
axis — 以什么方向进行分,默认axis = 0,以行↓方向;
level — 对所有列方向进行聚合时使用,单独列聚合不建议用;
as_index — 是否将分组列名作为输出的索引,默认为True;当设置为False时相当于加了reset_index功能;
[col] — 按哪列或哪行进行聚合;
funcname — 用于聚合数据的函数;sum 等等
注:()内以什么分组,[]内以什么聚合,最后是聚合的函数

df.groupby(col)          # 返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2])  # 返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]   # 返回按列col1进行分组后,列col2的均值
df.groupby([col1,col2]) [col3].funcname  # 返按多列进行分组后,列col3求函数;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值