原文 :https://blog.csdn.net/milton2017/article/details/54406482/
python 把幾個DataFrame合並成一個DataFrame——merge,append,join,conca
pandas provides various facilities for easily combining together Series, DataFrame, and Panel objects with various kinds of set logic for the indexes and relational algebra functionality in the case of join / merge-type operations.
1、merge
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)
left︰ 對象
right︰ 另一個對象
on︰ 要加入的列 (名稱)。必須在左、 右綜合對象中找到。如果不能通過 left_index 和 right_index 是假,將推斷 DataFrames 中的列的交叉點為連接鍵
left_on︰ 從左邊的綜合使用作為鍵列。可以是列名或數組的長度等於長度綜合
right_on︰ 從正確的綜合,以用作鍵列。可以是列名或數組的長度等於長度綜合
left_index︰ 如果為 True,則使用索引 (行標簽) 從左綜合作為其聯接鍵。在與多重 (層次) 的綜合,級別數必須匹配聯接鍵從右綜合的數目
right_index︰ 相同用法作為正確綜合 left_index
how︰ 之一 '左','右','外在'、 '內部'。默認為內部。每個方法的更詳細說明請參閱︰
sort︰ 綜合通過聯接鍵按字典順序對結果進行排序。默認值為 True,設置為 False將提高性能極大地在許多情況下
suffixes︰ 字符串后綴並不適用於重疊列的元組。默認值為 ('_x','_y')。
copy︰
即使重新索引是不必要總是從傳遞的綜合對象,復制的數據 (默認值True)。在許多情況下不能避免,但可能會提高性能 / 內存使用情況。可以避免復制上述案件有些病理但盡管如此提供此選項。
indicator︰ 將列添加到輸出綜合呼吁 _merge 與信息源的每一行。_merge 是絕對類型,並對觀測其合並鍵只出現在 '左' 的綜合,觀測其合並鍵只會出現在 '正確' 的綜合,和兩個如果觀察合並關鍵發現在兩個 right_only left_only 的值。
1.result = pd.merge(left, right, on='key')

2.result = pd.merge(left, right,on=['key1', 'key2'])
3.result = pd.merge(left, right, how='left', on=['key1', 'key2'])

4.result = pd.merge(left, right, how='right', on=['key1', 'key2'])

5.result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

2、append
1.result = df1.append(df2)


2.result = df1.append(df4)
3.result = df1.append([df2, df3])
4.result = df1.append(df4, ignore_index=True)

4、join
left.join(right, on=key_or_keys) pd.merge(left, right, left_on=key_or_keys, right_index=True, how='left', sort=False)
1.result = left.join(right, on='key')


2.result = left.join(right, on=['key1', 'key2'])

3.result = left.join(right, on=['key1', 'key2'], how='inner')

4、concat
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
objs︰ 一個序列或系列、 綜合或面板對象的映射。如果字典中傳遞,將作為鍵參數,使用排序的鍵,除非它傳遞,在這種情況下的值將會選擇 (見下文)。任何沒有任何反對將默默地被丟棄,除非他們都沒有在這種情況下將引發 ValueError。
axis: {0,1,...},默認值為 0。要連接沿軸。
join: {'內部'、 '外'},默認 '外'。如何處理其他 axis(es) 上的索引。聯盟內、 外的交叉口。
ignore_index︰ 布爾值、 默認 False。如果為 True,則不要串聯軸上使用的索引值。由此產生的軸將標記 0,...,n-1。這是有用的如果你串聯串聯軸沒有有意義的索引信息的對象。請注意在聯接中仍然受到尊重的其他軸上的索引值。
join_axes︰ 索引對象的列表。具體的指標,用於其他 n-1 軸而不是執行內部/外部設置邏輯。
keys︰
序列,默認為無。構建分層索引使用通過的鍵作為最外面的級別。如果多個級別獲得通過,應包含元組。
levels︰ 列表的序列,默認為無。具體水平 (唯一值) 用於構建多重。否則,他們將推斷鑰匙。
names︰ 列表中,默認為無。由此產生的分層索引中的級的名稱。
verify_integrity︰ 布爾值、 默認 False。檢查是否新的串聯的軸包含重復項。這可以是相對於實際數據串聯非常昂貴。
副本
︰ 布爾值、 默認 True。如果為 False,請不要,不必要地復制數據。
1.frames = [df1, df2, df3] 2.result = pd.concat(frames)


3.result = pd.concat(frames, keys=['x', 'y', 'z'])
4.result.ix['y']
A B C D
4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7
5.result = pd.concat([df1, df4], axis=1)
6.result = pd.concat([df1, df4], axis=1, join='inner')
7.result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])
8.result = pd.concat([df1, df4], ignore_index=True)
