在Pandas的實踐過程中,我們經常需要將兩個DataFrame合並組合在一起再進行處理,比如將不同來源的數據合並在一起,或者將不同日期的DataFrame合並在一起。
DataFrame的合並組合從方向上分,大體上分為兩種情況:橫向的,縱向的。(這個很容易理解吧)
看下如下的圖示(圖片來自Pandas官網)

橫向

縱向
另外需要注意的是,兩個DataFrame在合在一起的時候,如果針對重疊項(比如都有column B)會有兩種不同的處理方式,一種是針對重疊項進行合並處理(比如相加,或者直接取代);另一種是忽略重疊項,只是簡單的組合在一起。前者我們稱為合並,后者我們叫做組合。
另外,在Pandas中有很多不同函數和不同用法,比如有concat, join, merge, append,它們各有不同的使用場景。
縱向連接
橫向連接與合並
前面我們已經知道concat不僅可以縱向連接,也可以橫向連接
我們看到concat仍然是一種拼接,其根據index進行join,而merge更加靈活,可以根據指定的column來進行合並,如下:
可以針對多個列進行join,並重新命名后綴,如下:
關於merge還有幾個常用的參數說明如下:
- left_index & right_index: 當我們需要通過index來進行join的時候(類似concat),則可以使用left_index 或者right_index.
- sort: 默認為False,如果True則將join的key按照字典順序進行排序,比如我們按照"city"進行join的時候,會按照"city"的字典順序進行排序。但如果我們不需要排序,則可以將其置為False,以提高性能
- validate: 主要針對duplicate的情況,它有以下幾個參數可以設置
“one_to_one” or “1:1”: checks if merge keys are unique in both left and right datasets.
“one_to_many” or “1:m”: checks if merge keys are unique in left dataset.
“many_to_one” or “m:1”: checks if merge keys are unique in right dataset.
“many_to_many” or “m:m”: allowed, but does not result in checks.
更多關於merge的說明參考如下鏈接:
關於merge的說明
另外,join是merge的一種簡便寫法,其底層是通過merge來實現的,如下兩種表達方式是相同的。

示例:

merging_join_key_columns.png
需要注意的是當要join的兩個DataFrame有同名的列時,必須指定suffix,否則會報錯,如下:
