Pandas使用concat進行數據連接與合併

1、背景

談到pandas數據的行更新、表合併等操作,一般用到的方法有concat、join、merge。但這三種方法對於很多新手來說,都不太好分清使用的場合與用途。今天就pandas官網中關於數據合併和重述的章節做個使用方法的總結。(文中代碼塊主要有pandas官網教程提供。)

2、concat的使用場景

在實際的使用中,我們也會用到將兩組或者多組數據直接簡單的合併,並不需要進行匹配,這時候就需要用到concat()函數了。

3、concat函數簡介

concat函數是在pandas中的方法,可以將數據根據不同的軸作簡單的融合。

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:Series,DataFrame或Panel對象的序列或映射。如果傳遞了dict,則排序的鍵將用作鍵參數,除非它被傳遞,在這種情況下,將選擇值(見下文)。任何無對象將被靜默刪除,除非它們都是無,在這種情況下將引發一個ValueError。
  • axis:{0,1,…},默認爲0。沿着連接的軸。
  • join:{‘inner’,‘outer’},默認爲“outer”。如何處理其他軸上的索引。outer爲聯合和inner爲交集。
  • ignore_index:boolean,default False。如果爲True,請不要使用並置軸上的索引值。結果軸將被標記爲0,…,n-1。如果要連接其中並置軸沒有有意義的索引信息的對象,這將非常有用。注意,其他軸上的索引值在連接中仍然受到尊重。
  • join_axes:Index對象列表。用於其他n-1軸的特定索引,而不是執行內部/外部設置邏輯。
  • keys:序列,默認值無。使用傳遞的鍵作爲最外層構建層次索引。如果爲多索引,應該使用元組。
  • levels:序列列表,默認值無。用於構建MultiIndex的特定級別(唯一值)。否則,它們將從鍵推斷。
  • names:list,default無。結果層次索引中的級別的名稱。
  • verify_integrity:boolean,default False。檢查新連接的軸是否包含重複項。這相對於實際的數據串聯可能是非常昂貴的。
  • copy:boolean,default True。如果爲False,請勿不必要地複製數據。

4、concat功能詳解

我們用以下案例詳細說明concat函數的用法

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
					'B': ['B0', 'B1', 'B2', 'B3'],
					'C': ['C0', 'C1', 'C2', 'C3'],
					'D': ['D0', 'D1', 'D2', 'D3']},
					index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
					'B': ['B4', 'B5', 'B6', 'B7'],
					'C': ['C4', 'C5', 'C6', 'C7'],
					'D': ['D4', 'D5', 'D6', 'D7']},
					index=[4, 5, 6, 7])

pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
			  'B': ['B8', 'B9', 'B10', 'B11'],
			  'C': ['C8', 'C9', 'C10', 'C11'],
			  'D': ['D8', 'D9', 'D10', 'D11']},
			  index=[8, 9, 10, 11])
# 現將表構成list,然後在作爲concat的輸入			  
frames = [df1, df2, df3]
result = pd.concat(frames)

在這裏插入圖片描述
我們根據以上建立的數據結果針對不同情況進行concat功能的詳解

4.1 相同字段的表首尾相接

要在相接的時候在加上一個層次的key來識別數據源自於哪張表,可以增加key參數

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

在這裏插入圖片描述

4.2 橫向表拼接(行對齊)

4.2.1 axis

當axis = 1的時候,concat就是行對齊,然後將不同列名稱的兩張表合併

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

在這裏插入圖片描述

4.2.2 join

加上join參數的屬性,如果爲’inner’得到的是兩表的交集,如果是outer,得到的是兩表的並集。

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

在這裏插入圖片描述

4.2.3 join_axes

如果有join_axes的參數傳入,可以指定根據那個軸來對齊數據
例如根據df1表對齊數據,就會保留指定的df1表的軸,然後將df4的表與之拼接

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

在這裏插入圖片描述

4.3 append

append是series和dataframe的方法,使用它就是默認沿着列進行憑藉(axis = 0,列對齊)

result = df1.append(df2)

在這裏插入圖片描述

4.4 無視index的concat

如果兩個表的index都沒有實際含義,使用ignore_index參數,置true,合併的兩個表就睡根據列字段對齊,然後合併。最後再重新整理一個新的index。

result = df1.append(df4, sort=False)

在這裏插入圖片描述

4.5 合併的同時增加區分數據組的鍵

前面提到的keys參數可以用來給合併後的表增加key來區分不同的表數據來源

4.5.1 可以直接用key參數實現

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

在這裏插入圖片描述

4.5.2 傳入字典來增加分組鍵

pieces = {'x': df1, 'y': df2, 'z': df3}
result = pd.concat(pieces)

在這裏插入圖片描述

4.6 在dataframe中加入新的行

append方法可以將 series 和 字典就夠的數據作爲dataframe的新一行插入。

s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])
result = df1.append(s2, ignore_index=True)

在這裏插入圖片描述

4.7 表格列字段不同的表合併

如果遇到兩張表的列字段本來就不一樣,但又想將兩個表合併,其中無效的值用nan來表示。那麼可以使用ignore_index來實現。

dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4},
		{'A': 5, 'B': 6, 'C': 7, 'Y': 8}]
result = df1.append(dicts, ignore_index=True, sort=False)

在這裏插入圖片描述

總結

以上就是concat函數的常用功能詳解,之後的內容我將繼續介紹pandas中其他進行數據合併的方法模塊——join & merge

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章