DataFrame系列3之Pandas.DataFrame操作表連接三種方式:merge, join, concat

目錄

1.concat 

2.JOIN

3.merge


        作爲DataFrame系列的第三部分,主要是對兩個DataFrame之間的關聯進行介紹。

以下面兩個DataFrame爲例進行語法的介紹:

df_1 = pd.read_csv('D:/traindatas/map_1.csv', sep=',', header='infer')  # 測試集
df_2 = pd.read_csv('D:/traindatas/map_2.csv', sep=',', header='infer')  # 測試集

1.concat 

concat 軸向連接。就是單純地把兩個表拼在一起,這個過程也被稱作綁定(binding)或堆疊(stacking)。函數的關鍵參數應該是 axis

默認值:axis=0

axis=0:豎方向(index)合併,合併方向index作列表相加,非合併方向columns取並集

axis=1:橫方向(columns)合併,合併方向columns作列表相加,非合併方向index取並集

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
          keys=None, levels=None, names=None, verify_integrity=False,
          copy=True)

1)默認情況

注意到這裏,左表和右表沒有一個單元格是一樣的,只是按照行索引水平堆在了一起

pd.concat([df_1, df_2])

2)axis=0 

是根據id相同的堆疊在一起,相當於full join操作
pd.concat([df_1, df_2],axis=0)

3)axis=1  注意到這裏,左表和右表不是根據id一樣拼在一起的,只是按照行索引水平堆在了一起

pd.concat([df_1, df_2],axis=1)

2.JOIN

JOIN 拼接列,主要用於基於行索引上的合併。

  • 只要兩個表列名不同,不加任何參數就可以直接用。
  • 如果兩個表有重複的列名,需指定lsuffix, rsuffix參數。
  • 默認左外連接how=left
df1.join(df2, lsuffix='_l', rsuffix='_r') # 列名重複的時候需要指定lsuffix, rsuffix參數

1)axis=0時join='inner',columns取交集: 

2)axis=1時join='inner',index取交集:

3.merge

  • 默認以重疊列名當做鏈接鍵;默認是INNER JOIN
  • 可以多鍵連接,'on'參數後傳入多鍵列表即可
  • 如果兩個對象的列表不同,可以用left_on, right_on指定。
  • 也可以用行索引當連接鍵,使用參數left_index=True, right_index=True. 但是這種情況下最好用JOIN
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)
  1. left與right:就是我們的df_1,df_2
  2. how:指的是合併(連接)的方式:inner(內連接),left(左外連接),right(右外連接),outer(全外連接);默認爲inner
  3. on : 指的是用於連接的列索引名稱。必須存在左右兩個DataFrame對象中,如果沒有指定且其他參數也未指定則以兩個DataFrame的列名交集做爲連接鍵
  4. left_on:左表用作連接鍵的列名;這個參數中左右列名不相同,但代表的含義相同時非常有用。
  5. right_on:右表用作 連接鍵的列名
  6. left_index:左表的行索引做爲連接鍵,用到這個參數時,就有點類似於上面的JOIN函數了。
  7. right_index:使用右表的行索引做爲連接鍵
  8. sort:默認爲True,將合併的數據進行排序。在大多數情況下設置爲False可以提高性能
  9. suffixes:字符串值組成的元組,用於指定當左右DataFrame存在相同列名時在列名後面附加的後綴名稱,默認爲('_x','_y')
  10. copy:默認爲True,總是將數據複製到數據結構中;大多數情況下設置爲False可以提高性能
  11. indicator:在 0.17.0中還增加了一個顯示合併數據中來源情況;如只來自己於左邊(left_only)、兩者(both)

看一個簡單的例子:不加任何參數,就默認以兩表中都有的建作爲主鍵連接了,即默認合併後只保留有共同列項並且值相等行(即交集)

看下indicator的用法:

默認值:indicator=False,不顯示合併方式

設置True表示顯示合併方式,即left / right / both:

以上是對三個函數的簡單介紹,三個函數還有很豐富的功能,這裏就不再深入介紹了。 

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