English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pandas 连接的操作实例
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的索引(行标签)作为其连接键。如果DataFrame具有MultiIndex(分层),则级别数必须与右侧DataFrame中的连接键数匹配。 right_index − 相同的使用作为left_index为正确的数据帧。 how − “左”,“右”,“外”,“内”之一。默认为内部。每种方法已在下面描述。 sort − 排序的结果数据框中加入字典顺序按键。默认情况下为True,在许多情况下,设置为False将大大提高性能。
이제 두 개의 다른 DataFrame를 생성하고 그들을 조인 작업을 수행하겠습니다.
# import the pandas library import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame( {'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365}) print(left print(right)
실행 결과는 다음과 같습니다:
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
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, on='id'))
실행 결과는 다음과 같습니다:
Name 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
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, on=['id', 'subject_id']))
실행 결과는 다음과 같습니다:
Name_x id subject_id Name_y 0 Alice 4 sub6 Bryce 1 Ayoung 5 sub5 Betty
합병의 how 매개변수는 결과 테이블에 포함될 키를 결정하는 방법을 지정합니다. 왼쪽이나 오른쪽 테이블에서 조합 키가 모두 없으면, 조인 테이블의 값은 NA입니다.
여기서는 어떻게 선택하고 그 SQL 대응 이름을 사용하는지 요약하겠습니다:
합병 방법 | SQL 대응 | 설명 |
left | LEFT OUTER JOIN | 왼쪽 객체의 키 사용 |
right | RIGHT OUTER JOIN | 정확한 객체의 키 사용 |
outer | FULL OUTER JOIN | 합병 키 사용 |
inner | INNER JOIN | 키의 교집합 사용 |
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, on='subject_id', how='left'))
실행 결과는 다음과 같습니다:
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
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, on='subject_id', how='right'))
실행 결과는 다음과 같습니다:
Name_x id_x subject_id Name_y id_y 0 Amy 2.0 sub2 Billy 1 1 Allen 3.0 sub4 Brian 2 2 Alice 4.0 sub6 Bryce 4 3 Ayoung 5.0 sub5 Betty 5 4 NaN NaN sub3 Bran 3
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, how='outer', on='subject_id'))
실행 결과는 다음과 같습니다:
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
결합은 인덱스에서 수행됩니다. 결합 연산은 호출된 객체를 받아들이며 따라서 a.join(b)는 b.join(a)와 다릅니다.
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub12465']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub24365']}) print(pd.merge(left, right, on='subject_id', how='inner'))
실행 결과는 다음과 같습니다:
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