English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exemplo de operação de conexão Pandas
Pandas possui operações de junção em memória de alta performance, funcional e semelhantes a bancos de dados relacionais como SQL.
Pandas fornece uma única função merge como ponto de entrada para todas as operações de junção de banco de dados padrão entre objetos DataFrame
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
Aqui, usamos os seguintes parâmetros:
esquerda − Um objeto DataFrame. direita − Outro objeto DataFrame. on − A coluna (nome) é adicionada no topo. Deve ser encontrada em ambos os objetos DataFrame. left_on − A coluna do DataFrame esquerdo é usada como chave. Pode ser o nome da coluna ou um array de comprimento igual ao comprimento do DataFrame. right_on − A coluna do DataFrame direito é usada como chave. Pode ser o nome da coluna ou um array de comprimento igual ao comprimento do DataFrame. left_index − Se for True, o índice do DataFrame esquerdo (etiqueta de linha) é usado como chave de conexão. Se o DataFrame tiver MultiIndex (estratificado), o número de níveis deve coincidir com o número de chaves de conexão no DataFrame direito. right_index − Usado de maneira idêntica como left_index para o DataFrame correto. how − Um dos seguintes: 'esquerda', 'direita', 'externa', 'interna'. Pelo padrão, é interna. Cada método está descrito abaixo. sort − Os dados resultantes da ordenação são adicionados à caixa de dados em ordem字典al. Pelo padrão, é True, e em muitos casos, definido como False, pode aumentar significativamente o desempenho.
现在让我们创建两个不同的DataFrame并对其执行合并操作。
# import the pandas library import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5}) print(left print(right)
Os resultados da execução são os seguintes:
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], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, on='id'))
Os resultados da execução são os seguintes:
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], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, on=['id', 'subject_id']))
Os resultados da execução são os seguintes:
Name_x id subject_id Name_y 0 Alice 4 sub6 Bryce 1 Ayoung 5 sub5 Betty
o parâmetro how de combinação especifica como determinar quais chaves devem ser incluídas na tabela de resultado. Se a chave combinada não aparecer em nenhuma tabela do lado esquerdo ou direito, o valor na tabela de combinação será NA.
aqui está um resumo de como escolher e seus nomes equivalentes SQL:
método de combinação | equivalente SQL | descrição |
esquerda | LEFT OUTER JOIN | usar chave do objeto esquerdo |
direita | RIGHT OUTER JOIN | usar chave correta do objeto |
externo | FULL OUTER JOIN | usar chave combinada |
interno | JOIN INTERNO | usar interseção de chave |
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, on='subject_id', how='left'))
Os resultados da execução são os seguintes:
Nome_x id_x subject_id Nome_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], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, on='subject_id', how='right'))
Os resultados da execução são os seguintes:
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], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, how='outer', on='subject_id'))
Os resultados da execução são os seguintes:
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 conexão será executada no índice. A operação de junção aceita o objeto chamado. Portanto, a.join(b) não é igual a b.join(a).
import pandas as pd left = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame({ 'id': [1,2,3,4,5], 'Nome': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(pd.merge(left, right, on='subject_id', how='inner'))
Os resultados da execução são os seguintes:
Nome_x id_x subject_id Nome_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