这些数据合并的神操作.docx

上传人:李司机 文档编号:1962649 上传时间:2022-12-28 格式:DOCX 页数:43 大小:120.60KB
返回 下载 相关 举报
这些数据合并的神操作.docx_第1页
第1页 / 共43页
这些数据合并的神操作.docx_第2页
第2页 / 共43页
这些数据合并的神操作.docx_第3页
第3页 / 共43页
这些数据合并的神操作.docx_第4页
第4页 / 共43页
这些数据合并的神操作.docx_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《这些数据合并的神操作.docx》由会员分享,可在线阅读,更多相关《这些数据合并的神操作.docx(43页珍藏版)》请在三一办公上搜索。

1、Pandas提供了多功能、高性能的内存连接操作,本质上类似于SQL等关系数据库,比如,merge、join、concat等方法可以方便地得具有多种集合逻辑的Series或DataFrame数据合并、拼接在一起,用于实现索引和关系代数功能。- merge方法主要基于数据表共同的列标签进行合并,- join方法主要基于数据表的index标签进行合并,- c。IlCat方法是对数据表进行行拼接或列拼接。Olmerge方法merge方法的主要应用场景是针对存在同一个或多个相同列标签(主键)的包含不同特征的两个数据表,通过主键的连接将这两个数据表进行合并。其语法格式如下:result=pd.merge(

2、left,right,how=,inneron=None,left_on=Nonejright_on=None,IeftJndex=False,PighJindex=False,.)常用的参数含义说明如下。:参与合并的左/右侧的Series或DataFrame对象(数据表)。 how:数据合并的方式。默认为,inner,表示内连接(交集),,outer*表示外连接(并集),left表示基于左侧数据列的左连接,right表示基于右侧数据列的右连接。 on:指定用于连接的列标签,可以是一个列标签,也可以是一个包含多个列标签的列表。默认为left和right中相同的列标签。 Ieft_on/righ

3、t_on:当left和right中合并的列标签名称不同时,用来分别指定左/右两表合并的列标签。 Ieft_index/right_index:布尔类型,默认为Falseo当设置为True时,则以左/右侧的行标签作为连接键。下面通过代码清单1演示merge方法的用法。代码清单1merge方法的用法示例1 importpandasaspd2 left=pdDaaFrame(,keyl,:,K0,K1K2Jkey2:,K0,Kl,K0JA:A0,Al:A2JB:B0BIB2ImZ3 right=pd.DataFrame(,keyl,:,K0,K1,j,K2,j,key2:,K0,K0,K0,C,:,

4、C0,jClj,C2L,D,:D0,D1,D2)4 fj,nt(,left:n2J1eft)5 print(,right:n,jgh;)6 resultl=pd.merge(left,right,on=keyl,)#内连接7 Print根据keyl歹IJ将Ieft和right内连接:r,resultl)8 result2=pd,merge(Ieft,right,On=keyl,key2)9 PriITt(根据keyl和key2列将left和right内连接:n,result2)10 result3=pd.merge(left,right,how=outer,On=keylkey21)11 Pr

5、ilTt(根据keyl和key2歹等left和right外连接:n,result3)12 result4=pd.merge(efjright,how=,left,on=,keyl,key2)13 print(,keyl和key2列将left和right左连接:n,jresult4)14 result5=pd.merge(left,right,how=right*jon=keyljkey2)15 Print(,根据keyl和key2歹IJ将Ieft和right右连接:n,result5)程序执行结束后,输出结果如下:1KlK0ClDl2K2K0C2D2根据keyl歹将left和right内连接:

6、keylkey2_xABkey2_yCD0K0K0A0B0K0C0D01KlKlAlBlK0ClDl2K2K0A2B2K0C2D2ffieyl和key2列将Ieft和right内连接:keylkey2ABCD0K0K0A0B0C0D01K2K0A2B2C2D2keyl和key2列将left和right外连接keylkey2ABCD0K0K0A0B0C0D01KlKlAlBlNaNNaN2K2K0A2B2C2D23KlK0NaNNaNClDl根据key,和key2列将Ieft和right左连接:keylkey2ABCD0K0K0A0B0C0D01KlKlAlBlNaNNaN2K2K0A2B2C2

7、D2根据keyl和key2列将Ieft和right右连接:keylkey2ABCDK0K0A0B0C0D01K2K0A2B2C2D22KlK0NaNNaNClDl下面对代码清单1中的代码做简要说明。- 第2行代码通过字典创建了一个3行4列的DataFrame对象left,如第4行print函数的输出结果所示。- 第3行代码通过字典创建了一个3行4列的DataFrame对象right,如第5行print函数的输出结果所示。- 第6行代码通过merge方法将left与right合并,on=keyl,指定根据列标签keyl进行合并,合并方式默认为内连接,合并后的结果为一个3行7列的DataFrame

8、对象,如第7行print函数的输出结果所示。内连接是取left和right的交集,由于leftright中keyl列的数据完全相同,因此保留了两个数据表中的所有行。除keyl之外,left和right中还存在另一个相同的列标签key2,为了在合并后的对象中加以区分,Pandas自动将left中的key2重命名为right中的key2重命名为key2_yO-第8行代码通过merge方法将left与right合并,on=,keyl,r,key2,指定根据列标签key2进行合并,合并方式默认为内连接,合并后的结果为一个2行6列的DataFrame对象,如第9行print函数的输出结果所示。由于lef

9、t和right中key2列数据不完全相同,因此要取left和right的交集,只将,keyl,z,key2,两列组合数据完全相同的行进行合并,即将第1行和第3行合并,并自动调整合并后DataFrame对象的indexO-第10行代码通过merge方法将left与right合并,on=LkeylI,key2,指定根据列标签keyl和key2进行合并,how=outer指定合并方式为外连接,合并后的结果为一个4行6列的DataFrame对象,如第11行print函数的输出结果所示。外连接是取left和right的并集,,keyl,key2,两列组合数据对应的行都会进行合并。对于left和right

10、中没有的列标签,要在对应位置设置NA,并自动调整合并后DataFrame对象的index-第12行代码通过merge方法将left与right合并/Qn=Lkeyl,key2,指定根据列标签keyl和key2进行合并,how=left指定合并方式为左连接,合并后的结果为一个3行6列的DataFrame对象,如第13行print函数的输出结果所示。左连接是保留left的所有数据,只取right中与left的,keyl,z,key2,组合数据相同的行进行合并。对于left中没有的列标签,要在对应位置设置NA,并自动调整合并后DataFrame对象的indexO-第14行代码通过merge方法将le

11、ftright合并,on=keyl,z,key2,指定根据列标签keyl和key2进行合并,how=right指定合并方式为右连接,合并后的结果为一个3行6列的DataFrame对象,如第15行print函数输出结果所示。右连接是保留right的所有数据,只取left中与right的eylI,key2,组合数据相同的行进行合并。对于right中没有的列标签,要在对应位置设置NAz并自动调整合并后DataFrame对象的indexOTips1)使用merge合并两个数据表,如果左侧或右侧的数据表中没有某个列标签,则连接表中对应的值将设置为NAe2)merge方法不会修改原始数据表,而是生成一个合

12、并后的副本。02join方法Pandas还提供了一种基于index标签的快速合并方法join方法。join连接数据的方法与merge一样,包括内连接、外连接、左连接和右连接。其语法格式如下:result=data.join(other.on=None,how=,left data是一个Series或DataFrame对象(数据表)。 other:要合并的Series或DataFrame又掾(gJSg表)。 on:可以是一个data中的列标签,也可以是一个包含多个data列标签的列表,表示otherdata的特定列上对齐。在实际应用中,如果other的index的值与data某一列的值相等,可以

13、通过将other的index和data中的特定列对齐进行合并,这类似于Excel中的VLOOKUP操作。 how:数据合并的方式。默认为left,表示左连接,基于dataindex标签进行连接;right表示右连接,基于other的index标签进行连接;inner表示内连接(交集);,outer,表示外连接(并集).下面通过代码清单2演示join方法的用法。代码清单2join方法的用法示例1 importpandasaspd2 left=pd.DataFrame(2)3df2=pd.DataFrame(,A,A3,A4l,A5,j,B,B3,B4,B5,C,:,C3,C4,C5j,DjD3,

14、D4,D5,index=3,4,5)4df3=pd.DataFrame(,A,zA6,A7A8,jB,:,B6B7,B8,CtC6JC7JC8,DtD6JD7JD8,index=6,7,8)5df4=pd.DataFrame(,B,r,B2,B3,B6,j,D,:,D2,D3,D6,F,r,F2,F3,F6,jindex=2,3,6)6resultl=pd.concat(dfl,df2jdf3)7prin(dfl、df2和df3纵向夕卜拼接:r,resultl)8result2=pd.concat(dfl,df2,axis=l,keys=ldfllJCrf21)9Print(dfl和肝2横向外

15、拼接(COnCat方法):n,result2)10result3=df1.join(df2jhow=,outer,?Isuffix=_dfl,jrsuffix=_2,)11PrilTt(PfI和df2横向外拼接(join方法):n,result3)12result4=pd.concat(dfl,df3)13 print(dfl和df3纵向外拼接:n,iresult4)14 result5=pd.concat(dfl,df3jignore_index=True)15 Print(PfI和肝3纵向外拼接并生成新的行标签:n,result5)16 result6=pd.concat(resultl,

16、df4,axis=l,join=inner,JeyS=,resultldf2)17 Print(,resultl和df4横向内拼接:n,result6)程序执行结束后,输出结果如下:dfl、df2和df3纵向外拼接:ABCD0A0B0C0D01AlBlClDl2A2B2C2D23A3B3C3D34A4B4C4D45A5B5C5D56A6B6C6D67A7B7C7D78A8B8C8D8dfl和df2横向外拼接(concat方法)dfldf2ABCDABCD0A0B0C0D0NaNNaNNaNNaN1AlBlClDlNaNNaNNaNNaN2A2B2C2D2NaNNaNNaNNaNNaNNaNNa

17、NNaNA3B3C3D34NaNNaNNaNMaNA4B4C4D45NaNNaNNaNNaNA5B5C5D5dfl和肝2横向外拼接(join方法)A_dflB_dflC_dflD_dflAdf2Bdf2Cdf2Ddf20A0B0C0D0NaNNaNNaNNaNPAlBlClDlNaNNaNNaNMaNLA2B2C2D2NaNNaNNaNNaN3NaNNaNNaNNaNA3B3C3D34NaNNaNNaNNaNA4B4C4D45NaNNaNNaNNaNA5B5C5D5dfl和df3纵向外拼接:BCDB0C0D0BlClDlB2C2D2B6C6D6B7C7D7B8C8D8AA0AlA2A6A7A8

18、dfl和df3纵向外拼接并生成新的彳标签:A0B0C0D0AlBlClDlA2B2C2D2A6B6C6D6A7B7C7D7A8B8C8D8resultl和df4横向内拼接:ABCDBDF2A2B2C2D2B2D2F23A3B3C3D3B3D3F36A6B6C6D6B6D6F6下面对代码清单3中的代码做简要说明。第25行代码分别通过字典创建了4个3行4列的DataFrame对象dfl、df2、df3、df49index分别被设置为0,1,23,4,56,7,82,3,6O-第6行代码通过concat方法将dfl、df2和df3拼接,采用默认的参数设置,即纵向勺曲甘妾。由于dfl、df2和df3的

19、列标签完全相等,但行标签没有重叠的部分,拼接后的结果为一个9行4列的DataFrame对象,如第7行print函数的输出结果所示。-第8行代码通过concat方法将dfl和df2腌,axis=l表示横向拼接,拼接方式默认为夕曲接。由于dfl和df2的列标签完全相等,拼接后的列会有重复的列标签。为了便于区分,设置参数keys=dflz,df2在最外层定义标签的分组情况,dfl的列标签的外层索引为,dfldf2的列标签的外层索引为df2,o拼接后的结果为一个6行8列的DataFrame对象,如第9行print函数的输出结果所示。第10行代码通过join方法将dfl和df2拼接,拼接方式与第8行代码

20、相同。how=,outer,设置为夕幽接,为了区外拼接后的对象中重复的列标签,设置Isuffix=,dfl,指定dfl的列名加上后缀;设置rsuffix=*_df2,指定df2的列名加上后缀_df2,如第11行print函数的输出结果所示。可以看到,result3中的元素数据与result2相同,不同之处在于result2采用外层索引的方式区分重复列,而result3采用列名加后缀的方法。- 第12行代码通过concat方法将dfl和df3拼接,采用默认的参数设置,即纵向外拼按。拼接后的结果为一个6行4列的DataFrame对象,如第13行print函数的输出结果所示,可以看到result3的

21、行标签完全保留了dfldf3的行标签。- 第14行代码在第12行代码的基础上,增加了参数设置ignore_index=True,表示会重新生成新的整数序列作为拼接后的DataFrame对象的行标签,如第15行print函数的输出结果所示。- 第16行代码通过concat方法将第6行代码的resultl和df4拼接,axis=l表示横向拼接,join=,inner指定内拼接。拼接后的结果为T3行7列的DataFrame对象,如第17行print函数的输出结果所示,保留了resultl和df4中相同的行标签。Tips1)在实际应用中,join方法常用于基于行标签对数据表的列进行拼接,Coneat方法则常用于基于列标签又擞据表的行进行拼接。2)ConCat方法不会修改原始数据表z而是生成一个合并后的副本。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号