这些数据合并的神操作.docx
Pandas提供了多功能、高性能的内存连接操作,本质上类似于SQL等关系数据库,比如,merge、join、concat等方法可以方便地得具有多种集合逻辑的Series或DataFrame数据合并、拼接在一起,用于实现索引和关系代数功能。- merge方法主要基于数据表共同的列标签进行合并,- join方法主要基于数据表的index标签进行合并,- c。IlCat方法是对数据表进行行拼接或列拼接。Olmerge方法merge方法的主要应用场景是针对存在同一个或多个相同列标签(主键)的包含不同特征的两个数据表,通过主键的连接将这两个数据表进行合并。其语法格式如下:result=pd.merge(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/right_on:当left和right中合并的列标签名称不同时,用来分别指定左/右两表合并的列标签。 Ieft_index/right_index:布尔类型,默认为Falseo当设置为True时,则以左/右侧的行标签作为连接键。下面通过代码清单1演示merge方法的用法。代码清单1merge方法的用法示例1 importpandasaspd2 left=pdDaaFrame(,keyl,:,K0,K1'K2'Jkey2':,K0','Kl','K0'JA':'A0','Al:'A2'JB':'B0'BI''B2ImZ3 right=pd.DataFrame(,keyl,:,K0,K1,j,K2,j,key2':,K0',K0,K0,C,:,C0,j'Cl'j,C2L,D,:'D0,D1,D2')4 fj,nt(,left:n'2J1eft)5 print(,right:n,j>gh;)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='keyl'key21)11 PrilTt('根据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='keyl'j'key2')15 Print(,根据keyl和key2歹IJ将Ieft和right右连接:n,result5)程序执行结束后,输出结果如下:1KlK0ClDl2K2K0C2D2根据keyl歹将left和right内连接:keylkey2_xABkey2_yCD0K0K0A0B0K0C0D01KlKlAlBlK0ClDl2K2K0A2B2K0C2D2ffieyl和key2列将Ieft和right内连接:keylkey2ABCD0K0K0A0B0C0D01K2K0A2B2C2D2keyl和key2列将left和right外连接keylkey2ABCD0K0K0A0B0C0D01KlKlAlBlNaNNaN2K2K0A2B2C2D23KlK0NaNNaNClDl根据key,和key2列将Ieft和right左连接:keylkey2ABCD0K0K0A0B0C0D01KlKlAlBlNaNNaN2K2K0A2B2C2D2根据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对象,如第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函数的输出结果所示。由于left和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中没有的列标签,要在对应位置设置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方法将leftright合并,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方法不会修改原始数据表,而是生成一个合并后的副本。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,:,B'j'B1','B2',index='