目錄
準(zhǔn)備工作
一、橫向拼接
1.1 一般拼接
1.2 指定鍵進(jìn)行拼接,即指定某一列作為兩個(gè)表的連接依據(jù)。
1.2.1 多對(duì)一
1.2.2 多對(duì)多
1.2.3 用on來(lái)指定多個(gè)連接鍵
1.2.4?指定左右連接鍵
1.2.5?索引當(dāng)作連接鍵
1.3?連接的方式
1.3.1 內(nèi)連接(inner)
1.3.2 左連接(left)
1.3.3 右連接(right)
1.3.4 外連接(outer)
二、縱向拼接
2.1 普通合并
2.2 重疊數(shù)據(jù)的合并
三、整合代碼
準(zhǔn)備工作
我準(zhǔn)備了兩個(gè)表格數(shù)據(jù),以此展示本期的表格的合并的工作。數(shù)據(jù)示例如下:
表格1
表格2
接著將這兩個(gè)表格的數(shù)據(jù)分別導(dǎo)入python中,導(dǎo)入代碼入下:
import pandas as pd
df1=pd.read_excel(r"D:\雜貨\展示數(shù)據(jù)1.xlsx",sheet_name='Sheet1')
df2=pd.read_excel(r"D:\雜貨\展示數(shù)據(jù)2.xlsx",sheet_name='Sheet1')
?具體的導(dǎo)入方法和以上使用到的pandas庫(kù)的安裝在前章我已有介紹,不再贅述,請(qǐng)轉(zhuǎn)至:
https://blog.csdn.net/Deng333333555/article/details/125092526?spm=1001.2014.3001.5501
本篇涉及到一些基礎(chǔ)的表格數(shù)據(jù)的概念,而對(duì)于“索引”的相關(guān)知識(shí)可以看之前寫的“基礎(chǔ)操作篇2”,里面有相關(guān)的介紹,可以幫助理解“索引”的含義。相關(guān)可轉(zhuǎn)至以下連接:
https://blog.csdn.net/Deng333333555/article/details/125138116?spm=1001.2014.3001.5501?
一、橫向拼接
1.1 一般拼接
首先我們先看一下合并前的表格1和表格2的數(shù)據(jù)樣式:
?這兩個(gè)表格存在公共列,為列索引為“學(xué)號(hào)”的那一列。
合并代碼如下:
merge_1=pd.merge(df1,df2)#df1與df2分別為要合并的兩個(gè)表格
print(merge_1)
此時(shí)程序會(huì)自己尋找兩個(gè)表的公共列,依照公共列進(jìn)行拼接。(公共列:有相同的列)
?合并后的數(shù)據(jù)如上圖所示。
1.2 指定鍵進(jìn)行拼接,即指定某一列作為兩個(gè)表的連接依據(jù)。
1.2.1 多對(duì)一
多對(duì)一的情況下的列表數(shù)據(jù)大致為一下形式:
?可以看到,上面為列表1,下面為列表2,列表1的“學(xué)號(hào)”那一列的數(shù)據(jù)都是“唯一的”,即分別只有一個(gè)100,101,102,103,沒(méi)有重復(fù)值;而在列表2中,“學(xué)號(hào)”那一列的數(shù)據(jù)就有重復(fù)值,即有兩個(gè)100,101等。這種情況下,將列表2合并到列表1中就叫作多對(duì)一的合并。
合并代碼如下:
merge_2=pd.merge(df1,df2,on="學(xué)號(hào)")#on="學(xué)號(hào)"即是說(shuō)依照學(xué)號(hào)那一列進(jìn)行合并
print(merge_2)
1.2.2 多對(duì)多
多對(duì)多情況下的數(shù)據(jù)樣式如下:
?由上圖可知,多對(duì)多即是列表1與列表2中“學(xué)號(hào)”列都有重復(fù)項(xiàng)。合并代碼如下:
merge_3=pd.merge(df1,df2)
print(merge_3)
?合并后的表格如下:
1.2.3 用on來(lái)指定多個(gè)連接鍵
原數(shù)據(jù)樣式如下:
?上面為表格1,下面為表格2(即df1和df2)
由1.2.1一處已經(jīng)了解到,可以通過(guò)on="學(xué)號(hào)"來(lái)指定某個(gè)連接鍵,而當(dāng)需要指定多個(gè)連接鍵時(shí),同樣也是使用on來(lái)實(shí)現(xiàn)。代碼如下:
merge_4=pd.merge(df1,df2,on=['姓名','學(xué)號(hào)'])#語(yǔ)法為on=[]
print(merge_4)
合并后的列表如下:
1.2.4?指定左右連接鍵
合并前的數(shù)據(jù)樣式為:
?以上為兩個(gè)待拼接的表格。
當(dāng)要連接的兩個(gè)表之間沒(méi)有公共列時(shí)(實(shí)際值一樣,但列名不同),則可通過(guò)左右連接鍵拼接兩個(gè)表。其中l(wèi)eft_on用來(lái)指明左表的連接鍵的列名,right_on用來(lái)指明右表的連接鍵的列名。具體看如下示,代碼如下:
merge_5=pd.merge(df1,df2,left_on="編號(hào)",right_on='學(xué)號(hào)')
print(merge_5)
執(zhí)行代碼,合并后的列表如下:
1.2.5?索引當(dāng)作連接鍵
從上面的表格數(shù)據(jù)中可以看到,其索引列為最左邊的那幾個(gè)數(shù)字,0,1,2,3……。但有時(shí)候我們會(huì)需要用某一列的內(nèi)容作為索引列,此時(shí)可以通過(guò)以下代碼將索引列替換掉:
change=df1.set_index("編號(hào)")
print(change)
轉(zhuǎn)換索引列前的列表樣式如下:
?轉(zhuǎn)換之后索引列的列表樣式如下:
不難發(fā)現(xiàn)最左邊的那一列的索引有所不同。(注意:此時(shí)待合并的列表1與列表2的索引已經(jīng)不同了)
接下來(lái)我們可以通過(guò)以下代碼依據(jù)索引來(lái)進(jìn)行列表的合并:
merge_6=pd.merge(df1,df2,left_index=True,right_index=True)
print(merge_6)
合并后的列表樣式如下:
1.3?連接的方式
1.3.1 內(nèi)連接(inner)
內(nèi)連接就是取兩個(gè)表中的共同擁有的內(nèi)容,而若不是共同擁有的內(nèi)容的話,在內(nèi)連接后形成的新的表格會(huì)將非共同擁有的內(nèi)容“刪除”,只保留共同擁有的內(nèi)容。
合并前的兩個(gè)列表樣式如下:
?內(nèi)連接的代碼如下:
merge_7=pd.merge(df1,df2,on='學(xué)號(hào)',how='inner')
print(merge_7)
?合并后的表格如下:
1.3.2 左連接(left)
以左表為基礎(chǔ),右表往左表上拼接。當(dāng)遇到左(右)表有,而右(左)表沒(méi)有的內(nèi)容,空缺的部分則會(huì)以NaN的方式填充。
合并前的兩個(gè)列表樣式如下:
?合并代碼如下:
merge_8=pd.merge(df1,df2,on='學(xué)號(hào)',how='left')
print(merge_8)
?合并后表格如下:
1.3.3 右連接(right)
以右表為基礎(chǔ),左表往右表上拼接。其他與左連接同理。
1.3.4 外連接(outer)
取兩個(gè)表的并集。
合并代碼如下:
merge_9=pd.merge(df1,df2,on='學(xué)號(hào)',how='outer')
print(merge_9)
?合并前表格如下:
合并后表格如下:
二、縱向拼接
2.1 普通合并
合并前表格如下:
代碼如下:
merge_x=pd.concat([df1,df2])
print(merge_x)
合并后表格如下:
注意:縱向拼接的concat中使用的是列表,和merge的形式有所不同。
索引設(shè)置:普通合并的方法中,合并后的表格是保留原索引的,如上圖所,編號(hào)處的數(shù)字索引是重復(fù)的。而為了解決這個(gè)問(wèn)題,我們通常會(huì)需要對(duì)索引進(jìn)行設(shè)置。
合并代碼如下:
merge_x=pd.concat([df1,df2],ignore_index=True)
print(merge_x)
合并后表格如下:
通過(guò)ignore_index=True設(shè)置的拼接表格后,可以發(fā)現(xiàn)最左邊的編號(hào)索引編程了順序數(shù)字。
2.2 重疊數(shù)據(jù)的合并
在未處理重疊數(shù)據(jù)的合并形式下,如果兩個(gè)表格中出現(xiàn)相同的數(shù)據(jù)內(nèi)容,那么在合并后的新表格中會(huì)出現(xiàn)多條數(shù)據(jù)重復(fù)的情況,為解決這個(gè)問(wèn)題,我們可以進(jìn)行如下處理:
合并前的表格:
?通過(guò)以下代碼合并:
merge_y=pd.concat([df1,df2],ignore_index=True).drop_duplicates()
print(merge_y)
合并后的表格如下:
此時(shí)程序會(huì)自動(dòng)地將重復(fù)項(xiàng)合二為一。從合并前后的表格對(duì)比可知,合并前有兩個(gè)“王五”的內(nèi)容文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-798414.html
,合并后兩個(gè)“王五”合二為一。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-798414.html
三、整合代碼
import pandas as pd
df1=pd.read_excel(r"D:\雜貨\展示數(shù)據(jù)1.xlsx",sheet_name='Sheet1')
df2=pd.read_excel(r"D:\雜貨\展示數(shù)據(jù)2.xlsx",sheet_name='Sheet1')
print(df1)
print(df2)
merge_1=pd.merge(df1,df2)#一般橫向拼接
print(merge_1)
merge_2=pd.merge(df1,df2,on="學(xué)號(hào)")#指定連接鍵
print(merge_2)
merge_3=pd.merge(df1,df2)
print(merge_3)
merge_4=pd.merge(df1,df2,on=['姓名','學(xué)號(hào)'])#指定多個(gè)連接鍵
print(merge_4)
merge_5=pd.merge(df1,df2,left_on="編號(hào)",right_on='學(xué)號(hào)')#指定左右連接鍵
print(merge_5)
change=df1.set_index("編號(hào)")#重置索引
print(change)
merge_6=pd.merge(df1,df2,left_index=True,right_index=True)#依照索引拼接
print(merge_6)
merge_7=pd.merge(df1,df2,on='學(xué)號(hào)',how='inner')#內(nèi)連接
print(merge_7)
merge_8=pd.merge(df1,df2,on='學(xué)號(hào)',how='left')#左連接
print(merge_8)
merge_9=pd.merge(df1,df2,on='學(xué)號(hào)',how='outer')#外連接
print(merge_9)
merge_x=pd.concat([df1,df2],ignore_index=True)#一般縱向拼接
print(merge_x)
merge_y=pd.concat([df1,df2],ignore_index=True).drop_duplicates()#縱向拼接并重置索引
print(merge_y)
到了這里,關(guān)于【Python處理EXCEL】基礎(chǔ)操作篇3:用Python對(duì)Excel表格進(jìn)行拼接合并的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!