1. 程式人生 > 實用技巧 >python 把幾個DataFrame合併成一個DataFrame——merge,append,join,conca

python 把幾個DataFrame合併成一個DataFrame——merge,append,join,conca

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)

3 . 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,請不要,不必要地複製資料。
frames = [df1, df2, df3]
result = pd.concat(frames)

result = pd.concat(frames, keys=['x', 'y', 'z'])
result.ix['y']

result = pd.concat([df1, df4], axis=1)

result = pd.concat([df1, df4], axis=1, join='inner')

result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])

result = pd.concat([df1, df4], ignore_index=True)