Pandas具有功能全面的高性能內存中連接操作,與SQL等關系數據庫非常相似。
Pandas提供了一個單獨的merge()
函數,作為DataFrame對象之間所有標准數據庫連接操作的入口 -
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
在這里,有以下幾個參數可以使用 -
- left - 一個DataFrame對象。
- right - 另一個DataFrame對象。
- on - 列(名稱)連接,必須在左和右DataFrame對象中存在(找到)。
- left_on - 左側DataFrame中的列用作鍵,可以是列名或長度等於DataFrame長度的數組。
- right_on - 來自右的DataFrame的列作為鍵,可以是列名或長度等於DataFrame長度的數組。
- left_index - 如果為
True
,則使用左側DataFrame中的索引(行標簽)作為其連接鍵。 在具有MultiIndex(分層)的DataFrame的情況下,級別的數量必須與來自右DataFrame的連接鍵的數量相匹配。 - right_index - 與右DataFrame的left_index具有相同的用法。
- how - 它是left, right, outer以及inner之中的一個,默認為內inner。 下面將介紹每種方法的用法。
- sort - 按照字典順序通過連接鍵對結果DataFrame進行排序。默認為
True
,設置為False
時,在很多情況下大大提高性能。
現在創建兩個不同的DataFrame並對其執行合並操作。
合並使用“how”的參數
如何合並參數指定如何確定哪些鍵將被包含在結果表中。如果組合鍵沒有出現在左側或右側表中,則連接表中的值將為NA
。
這里是how
選項和SQL等效名稱的總結 -
合並方法 | SQL等效 | 描述 |
---|---|---|
left |
LEFT OUTER JOIN |
使用左側對象的鍵 |
right |
RIGHT OUTER JOIN |
使用右側對象的鍵 |
outer |
FULL OUTER JOIN |
使用鍵的聯合 |
inner |
INNER JOIN |
使用鍵的交集 |
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @File : s.py import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print (left) print("========================================") print (right) print("========================================") print("在一個鍵上合並兩個數據幀,how - 它是left, right, outer以及inner之中的一個,默認為內inner為交集") rs = pd.merge(left,right,on='id')#在一個鍵上合並兩個數據幀,how - 它是left, right, outer以及inner之中的一個,默認為內inner print(rs) print("========================================") print("合並多個鍵上的兩個數據框,默認為交集:") rs = pd.merge(left,right,on=['id','subject_id']) print(rs) print("========================================") print("使用左側對象的鍵:") rs = pd.merge(left, right, on='subject_id', how='left') print (rs) print("========================================") print("使用鍵的聯合:") rs = pd.merge(left, right, how='outer', on='subject_id') print (rs) print("========================================") print("使用鍵的交集:") rs = pd.merge(left, right, how='inner', on='subject_id') print (rs) D:\Download\python3\python3.exe D:/Download/pycharmworkspace/s.py Name id subject_id 0 Alex 1 sub1 1 Amy 2 sub2 2 Allen 3 sub4 3 Alice 4 sub6 4 Ayoung 5 sub5 ======================================== Name id subject_id 0 Billy 1 sub2 1 Brian 2 sub4 2 Bran 3 sub3 3 Bryce 4 sub6 4 Betty 5 sub5 ======================================== 在一個鍵上合並兩個數據幀,how - 它是left, right, outer以及inner之中的一個,默認為內inner為交集 Name_x id subject_id_x Name_y subject_id_y 0 Alex 1 sub1 Billy sub2 1 Amy 2 sub2 Brian sub4 2 Allen 3 sub4 Bran sub3 3 Alice 4 sub6 Bryce sub6 4 Ayoung 5 sub5 Betty sub5 ======================================== 合並多個鍵上的兩個數據框,默認為交集: Name_x id subject_id Name_y 0 Alice 4 sub6 Bryce 1 Ayoung 5 sub5 Betty ======================================== 使用左側對象的鍵: Name_x id_x subject_id Name_y id_y 0 Alex 1 sub1 NaN NaN 1 Amy 2 sub2 Billy 1.0 2 Allen 3 sub4 Brian 2.0 3 Alice 4 sub6 Bryce 4.0 4 Ayoung 5 sub5 Betty 5.0 ======================================== 使用鍵的聯合: Name_x id_x subject_id Name_y id_y 0 Alex 1.0 sub1 NaN NaN 1 Amy 2.0 sub2 Billy 1.0 2 Allen 3.0 sub4 Brian 2.0 3 Alice 4.0 sub6 Bryce 4.0 4 Ayoung 5.0 sub5 Betty 5.0 5 NaN NaN sub3 Bran 3.0 ======================================== 使用鍵的交集: Name_x id_x subject_id Name_y id_y 0 Amy 2 sub2 Billy 1 1 Allen 3 sub4 Brian 2 2 Alice 4 sub6 Bryce 4 3 Ayoung 5 sub5 Betty 5 Process finished with exit code 0