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


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()函數的所有參數,接下來通過例子對常用參數進行講解。

參數axis

假設有兩個來自不同部門的表格,一個來自銷售部門,一個來自人力部門,這兩個表一般會有一兩個相同的列,大多數列名不同,但是行索引相同,因為是對同一批人不同信息的統計。

來看個例子:

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

來自銷售部門的表df_s

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

來自人力部門的表df_h

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

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

keys和names

當表格拼接完成後,就不能判斷到底哪些數據是來自於哪一個表了,如果需要保留來源信息,就可以通過keys參數進行設置,而names參數可以給拼接後形成的數據結構添加名字。

來,看代碼:

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

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

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

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

參數join和join_axes

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

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

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

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

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

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

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

參數sort:

布爾值,默認值無

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

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

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

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

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

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

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

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

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

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

其他參數

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

copy:bool,默認為True,如果為False,則不要不必要地複製數據。

這兩個參數不是很常用,這裡不多做介紹了。

希望通過這篇文章讓你對pd.concat()函數有更深的認識,也希望你能夠越來越優秀!

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

更多優質內容及精彩資訊,可點擊【瞭解更多】迅速進入!


分享到:


相關文章: