《这些数据合并的神操作.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某一列的值相等,可以通过将other的index和data中的特定列对齐进行合并,这类似于Excel中的VLOOKUP操作。 how:数据合并的方式。默认为left,表示左连接,基于dataindex标签进行连接;right表示右连接,基于other的index标签进行连接;inner表示内连接(交集);,outer,表示外连接(并集).下面通过代码清单2演示join方法的用法。代码清单2join方法的用法示例1 importpandasaspd2 left=pd.DataFrame(,A,:,A0,Al,A2,j,B,:,BjB1,B2,index=