English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Conexão do Pandas

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

combinação de dois DataFrames em uma 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='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

combinação de dois DataFrames em várias chaves

 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

combinação usando o parâmetro how

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çãoequivalente SQLdescrição
esquerdaLEFT OUTER JOINusar chave do objeto esquerdo
direitaRIGHT OUTER JOINusar chave correta do objeto
externoFULL OUTER JOINusar chave combinada
internoJOIN INTERNOusar interseção de chave

conexão esquerda

 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

conexão direita

 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

conexão externa

 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

Conexão Interna

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