如何使用Python對Excel表格進(jìn)行拼接合并
準(zhǔn)備工作
我準(zhǔn)備了兩個表格數(shù)據(jù),以此展示本期的表格的合并的工作。數(shù)據(jù)示例如下:
表格1
表格2
接著將這兩個表格的數(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庫的安裝在前章我已有介紹,不再贅述,請轉(zhuǎn)至:
使用Python處理EXCEL基礎(chǔ)操作篇1在Python中導(dǎo)入EXCEL數(shù)據(jù)
本篇涉及到一些基礎(chǔ)的表格數(shù)據(jù)的概念,而對于“索引”的相關(guān)知識可以看之前寫的“基礎(chǔ)操作篇2”,里面有相關(guān)的介紹,可以幫助理解“索引”的含義。相關(guān)可轉(zhuǎn)至以下連接:
使用Python處理EXCEL基礎(chǔ)操作篇2Python對EXCEL數(shù)據(jù)的預(yù)處理
一、橫向拼接
1.1 一般拼接
首先我們先看一下合并前的表格1和表格2的數(shù)據(jù)樣式:
這兩個表格存在公共列,為列索引為“學(xué)號”的那一列。
合并代碼如下:
merge_1=pd.merge(df1,df2)#df1與df2分別為要合并的兩個表格 print(merge_1)
此時程序會自己尋找兩個表的公共列,依照公共列進(jìn)行拼接。(公共列:有相同的列)
合并后的數(shù)據(jù)如上圖所示。
1.2 指定鍵進(jìn)行拼接,即指定某一列作為兩個表的連接依據(jù)。
1.2.1 多對一
多對一的情況下的列表數(shù)據(jù)大致為一下形式:
可以看到,上面為列表1,下面為列表2,列表1的“學(xué)號”那一列的數(shù)據(jù)都是“唯一的”,即分別只有一個100,101,102,103,沒有重復(fù)值;而在列表2中,“學(xué)號”那一列的數(shù)據(jù)就有重復(fù)值,即有兩個100,101等。這種情況下,將列表2合并到列表1中就叫作多對一的合并。
合并代碼如下:
merge_2=pd.merge(df1,df2,on="學(xué)號")#on="學(xué)號"即是說依照學(xué)號那一列進(jìn)行合并 print(merge_2)
1.2.2 多對多
多對多情況下的數(shù)據(jù)樣式如下:
由上圖可知,多對多即是列表1與列表2中“學(xué)號”列都有重復(fù)項(xiàng)。合并代碼如下:
merge_3=pd.merge(df1,df2) print(merge_3)
合并后的表格如下:
1.2.3 用on來指定多個連接鍵
原數(shù)據(jù)樣式如下:
上面為表格1,下面為表格2(即df1和df2)
由1.2.1一處已經(jīng)了解到,可以通過on="學(xué)號"來指定某個連接鍵,而當(dāng)需要指定多個連接鍵時,同樣也是使用on來實(shí)現(xiàn)。代碼如下:
merge_4=pd.merge(df1,df2,on=['姓名','學(xué)號'])#語法為on=[] print(merge_4)
合并后的列表如下:
1.2.4 指定左右連接鍵
合并前的數(shù)據(jù)樣式為:
以上為兩個待拼接的表格。
當(dāng)要連接的兩個表之間沒有公共列時(實(shí)際值一樣,但列名不同),則可通過左右連接鍵拼接兩個表。其中l(wèi)eft_on用來指明左表的連接鍵的列名,right_on用來指明右表的連接鍵的列名。具體看如下示,代碼如下:
merge_5=pd.merge(df1,df2,left_on="編號",right_on='學(xué)號') print(merge_5)
執(zhí)行代碼,合并后的列表如下:
1.2.5 索引當(dāng)作連接鍵
從上面的表格數(shù)據(jù)中可以看到,其索引列為最左邊的那幾個數(shù)字,0,1,2,3……。但有時候我們會需要用某一列的內(nèi)容作為索引列,此時可以通過以下代碼將索引列替換掉:
change=df1.set_index("編號") print(change)
轉(zhuǎn)換索引列前的列表樣式如下:
轉(zhuǎn)換之后索引列的列表樣式如下:
不難發(fā)現(xiàn)最左邊的那一列的索引有所不同。(注意:此時待合并的列表1與列表2的索引已經(jīng)不同了)
接下來我們可以通過以下代碼依據(jù)索引來進(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)連接就是取兩個表中的共同擁有的內(nèi)容,而若不是共同擁有的內(nèi)容的話,在內(nèi)連接后形成的新的表格會將非共同擁有的內(nèi)容“刪除”,只保留共同擁有的內(nèi)容。
合并前的兩個列表樣式如下:
內(nèi)連接的代碼如下:
merge_7=pd.merge(df1,df2,on='學(xué)號',how='inner') print(merge_7)
合并后的表格如下:
1.3.2 左連接(left)
以左表為基礎(chǔ),右表往左表上拼接。當(dāng)遇到左(右)表有,而右(左)表沒有的內(nèi)容,空缺的部分則會以NaN的方式填充。
合并前的兩個列表樣式如下:
合并代碼如下:
merge_8=pd.merge(df1,df2,on='學(xué)號',how='left') print(merge_8)
合并后表格如下:
1.3.3 右連接(right)
以右表為基礎(chǔ),左表往右表上拼接。其他與左連接同理。
1.3.4 外連接(outer)
取兩個表的并集。
合并代碼如下:
merge_9=pd.merge(df1,df2,on='學(xué)號',how='outer') print(merge_9)
合并前表格如下:
合并后表格如下:
二、縱向拼接
2.1 普通合并
合并前表格如下:
代碼如下:
merge_x=pd.concat([df1,df2]) print(merge_x)
合并后表格如下:
注意:縱向拼接的concat中使用的是列表,和merge的形式有所不同。
索引設(shè)置:普通合并的方法中,合并后的表格是保留原索引的,如上圖所,編號處的數(shù)字索引是重復(fù)的。而為了解決這個問題,我們通常會需要對索引進(jìn)行設(shè)置。
合并代碼如下:
merge_x=pd.concat([df1,df2],ignore_index=True) print(merge_x)
合并后表格如下:
通過ignore_index=True設(shè)置的拼接表格后,可以發(fā)現(xiàn)最左邊的編號索引編程了順序數(shù)字。
2.2 重疊數(shù)據(jù)的合并
在未處理重疊數(shù)據(jù)的合并形式下,如果兩個表格中出現(xiàn)相同的數(shù)據(jù)內(nèi)容,那么在合并后的新表格中會出現(xiàn)多條數(shù)據(jù)重復(fù)的情況,為解決這個問題,我們可以進(jìn)行如下處理:
合并前的表格:
通過以下代碼合并:
merge_y=pd.concat([df1,df2],ignore_index=True).drop_duplicates() print(merge_y)
合并后的表格如下:
此時程序會自動地將重復(fù)項(xiàng)合二為一。從合并前后的表格對比可知,合并前有兩個“王五”的內(nèi)容,合并后兩個“王五”合二為一。
三、整合代碼
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é)號")#指定連接鍵 print(merge_2) merge_3=pd.merge(df1,df2) print(merge_3) merge_4=pd.merge(df1,df2,on=['姓名','學(xué)號'])#指定多個連接鍵 print(merge_4) merge_5=pd.merge(df1,df2,left_on="編號",right_on='學(xué)號')#指定左右連接鍵 print(merge_5) change=df1.set_index("編號")#重置索引 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é)號',how='inner')#內(nèi)連接 print(merge_7) merge_8=pd.merge(df1,df2,on='學(xué)號',how='left')#左連接 print(merge_8) merge_9=pd.merge(df1,df2,on='學(xué)號',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對Excel表格進(jìn)行拼接合并的文章就介紹到這了,更多相關(guān)Python處理EXCEL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)音樂播放和下載小程序功能
這篇文章主要介紹了python實(shí)現(xiàn)音樂播放和下載小程序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Python內(nèi)置函數(shù)的用法實(shí)例教程
這篇文章主要介紹了Python內(nèi)置函數(shù)的用法,包括求絕對值的abs()函數(shù)及數(shù)值類型轉(zhuǎn)換函數(shù)等,需要的朋友可以參考下2014-09-09python中列表(list)和元組(tuple)的深入講解
這篇文章主要給大家介紹了關(guān)于python中列表(list)和元組(tuple)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python基礎(chǔ)學(xué)習(xí)之條件控制語句小結(jié)
如果我需要設(shè)置一個死循環(huán),然后靠條件來終止,怎么辦?一個很簡單的問題,但是我卻沒有說,這一篇本應(yīng)該在分支控制語句里面的,現(xiàn)在只能拿出來水文再寫一篇了,需要的朋友可以參考下2021-05-05