pandas數據合併之一文弄懂pd.concat()

CDA數據分析師 出品

在工做中常常會遇到多個表進行拼接合並的需求,在pandas中有多個拼接合並的方法,每種方法都有本身擅長的拼接方式,這篇文章只對pd.concat()進行詳細講解,但願能幫助有須要的朋友一次完全弄清楚它的用法。小程序

pd.concat()函數簡介

pd.concat()函數能夠沿着指定的軸將多個dataframe或者series拼接到一塊兒,這一點和另外一個經常使用的pd.merge()函數不一樣,pd.merge()函數只能實現兩個表的拼接。文章的主題是pd.concat()函數,接下來認識一下這個函數吧:數據結構

pd.concat( objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True,)函數

以上是有關pd.concat()函數的全部參數,接下來經過例子對經常使用參數進行講解。spa

參數axis

假設有兩個來自不一樣部門的表格,一個來自銷售部門,一個來自人力部門,這兩個表通常會有一兩個相同的列,大多數列名不一樣,可是行索引相同,由於是對同一批人不一樣信息的統計。3d

來看個例子:blog

來自銷售部門的表df_s排序

來自人力部門的表df_h索引

經過上邊的例子,可以看出在函數pd.concat()中的默認拼接方式是上下堆疊,而銷售和人力的表格很明顯須要左右拼接,這時候就須要參數axis出場了:seo

keys和names

當表格拼接完成後,就不能判斷到底哪些數據是來自於哪個表了,若是須要保留來源信息,就能夠經過keys參數進行設置,而names參數能夠給拼接後造成的數據結構添加名字。rem

來,看代碼:

這是上下拼接狀況下標記每條記錄來自於哪一個表,添加名字說明

這是左右拼接狀況下標記每條記錄來自於哪一個表,添加名字說明

參數join和join_axes

前邊的代碼中對這兩個參數都沒有進行設置,其中join參數控制的是外鏈接仍是內鏈接,默認外鏈接,保留兩個表中的全部信息;若是設置成內鏈接,拼接結果只保留兩個表共有的信息,而join_axes參數是在內鏈接時選擇要完整保留哪一個表的索引,可是這個參數在官方文檔中提醒即將被棄用,因此不作詳細講解,只看一下join參數的表現吧:

這兩個表有部分相同的列名和部分相同的行索引,來對這兩個表進行兩個方向的拼接,設置join="inner"後查看下效果:

上下拼接的時候,保留了共有的列信息!

左右拼接的時候保留了共有的行信息!

參數sort:

布爾值,默認值無

· 當" join"爲" outer"時,若是有未對齊的軸,則對軸信息進行排序。 當前默認的排序默認值已棄用,在之後的pandas版本中將更改成不排序。

· 顯式傳遞``sort = True''使警告和排序保持沉默。

· 顯式傳遞``sort = False''以使警告靜音而不進行排序。

· 當"join ='inner'"已經保留了非串聯軸的順序時,這個命令無效。

以下圖,默認上下拼接,不進行sort參數設置會跳出警告,而且能看到列名已經被從新排序了:

設置sort=True,使警告沉默可是依然會被從新排序:

設置sort = False,使警告沉默而且不會被從新排序:

其餘參數

levels:序列列表,默認值無。用於構建MultiIndex的特定級別(惟一值)。不然,它們將從鍵推斷。

copy:bool,默認爲True,若是爲False,則不要沒必要要地複製數據。

這兩個參數不是很經常使用,這裏很少作介紹了。

但願經過這篇文章讓你對pd.concat()函數有更深的認識,也但願你可以愈來愈優秀!

疫情當下,昔日匆匆的步伐終於放慢了些,也是時候好好想一想本身的職業計劃和人生規劃了。提早作好準備,未雨綢繆,爲將來蓄能——蓄勢待發!

(1)更多優質內容和精彩資訊,可前往:https://www.cda.cn/?seo

(2)搜索CDA小程序,手機端隨時隨地瀏覽最新資訊和優質課程:

相關文章
相關標籤/搜索