A função Pandas DataFrame.merge() é utilizada para unir dois Da­ta­Fra­mes com base em chaves (keys) comuns. Desta forma, pode combinar dados de di­fe­ren­tes fontes de maneira eficiente para realizar análises mais completas.

Sintaxe da função Pandas merge()

A função Pandas DataFrame.merge() da Bi­bli­o­teca Python Pandas aceita uma ampla variedade de pa­râ­me­tros que afetam a forma como os Da­ta­Fra­mes são com­bi­na­dos. A sintaxe geral da função merge() é a seguinte:

DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
python

Pa­râ­me­tros re­le­van­tes

Com os di­fe­ren­tes pa­râ­me­tros aceites pela função Pandas merge(), não só es­pe­ci­fica os Da­ta­Fra­mes que deseja combinar, mas também o tipo de união (também chamado de join em inglês) e outros detalhes adi­ci­o­nais.

Parâmetro Descrição Valor pre­de­fi­nido
left Primeiro DataFrame a ser combinado
right Segundo DataFrame a ser combinado
how Tipo de união a ser realizada (inner, outer, left ou right) inner
on Coluna ou nível de índice utilizado como chave; deve estar presente em ambos os Da­ta­Fra­mes
left_on Coluna ou nível de índice do DataFrame esquerdo utilizado como chave
right_on Coluna ou nível de índice do DataFrame direito usado como chave
left_index Se for True, o índice do DataFrame esquerdo é usado como chave False
right_index Se for True, o índice do DataFrame direito é usado como chave False
sort Se for True, as chaves re­sul­tan­tes do DataFrame são ordenadas de forma le­xi­co­grá­fica False
suffixes Sufixos uti­li­za­dos para tornar únicas as colunas com nomes du­pli­ca­dos ("_x", "_y")
copy Se for False, não é feita uma cópia True

Como utilizar o Pandas merge()

Apre­sen­ta­mos uma série de exemplos que o ajudarão a com­pre­en­der como funciona o Pandas merge().

INNER JOIN ou união interna

Um INNER JOIN ou junção interna une dois Da­ta­Fra­mes do Pandas e retorna apenas as linhas em que as chaves coincidem em ambos os Da­ta­Fra­mes. Primeiro, criaremos dois Da­ta­Fra­mes que servirão de exemplo:

import pandas as pd
# DataFrames de ejemplo
df1 = pd.DataFrame({
    'Clave': ['A', 'B', 'C'],
    'Valor1': [1, 2, 3]
})
df2 = pd.DataFrame({
    'Clave': ['B', 'C', 'D'],
    'Valor2': [4, 5, 6]
})
print(df1)
print(df2)
python

Os dois Da­ta­Fra­mes re­sul­tan­tes teriam a seguinte aparência:

Clave    Valor1
0        A             1
1        B             2
2        C             3
    Clave    Valor2
0        B             4
1        C             5
2        D             6

Agora pode realizar um INNER JOIN uti­li­zando a função die merge():

# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Clave')
print(result)
python

A saída mostra que, neste exemplo, apenas as linhas com as chaves B e C são incluídas no DataFrame re­sul­tante, uma vez que estas estão presentes em ambos os Da­ta­Fra­mes originais.

Clave    Valor1    Valor2
0        B            2            4
1        C            3            5

OUTER JOIN ou união externa

Uma OUTER JOIN ou junção externa também une dois Da­ta­Fra­mes. Ao contrário da junção interna (INNER JOIN), com a junção externa todas as linhas são de­vol­vi­das e os valores em falta são pre­en­chi­dos com NaN.

# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Clave')
print(result)
python

Como era de se esperar, o DataFrame re­sul­tante inclui todas as linhas de ambos os Da­ta­Fra­mes. Para a chave A, que só está presente em df1, e a chave D, que só está presente em df2, os valores ausentes são pre­en­chi­dos com NaN.

Clave    Valor1    Valor2
0        A        1.0        NaN
1        B        2.0        4.0
2        C        3.0        5.0
3        D        NaN        6.0
Nota

As restantes variantes de JOIN que incluímos na tabela anterior funcionam de forma análoga.

Uti­li­za­ção de left_on e right_on

Às vezes, os dois Da­ta­Fra­mes têm nomes de colunas-chave di­fe­ren­tes. Nesse caso, pode usar os pa­râ­me­tros left_on e right_on para es­pe­ci­fi­car quais colunas devem ser uti­li­za­das. Para isso, primeiro deve criar dois novos Da­ta­Fra­mes:

df3 = pd.DataFrame({
    'Clave': ['A', 'B', 'C'],
    'Valor1': [1, 2, 3]
})
df4 = pd.DataFrame({
    'Clave2': ['B', 'C', 'D'],
    'Valor2': [4, 5, 6]
})
print(df3)
print(df4)
python

Os dois Da­ta­Fra­mes re­sul­tan­tes têm a seguinte aparência:

Clave    Valor1
0        A            1
1        B            2
2        C            3
    Clave2    Valor2
0        B            4
1        C            5
2        D            6

Para realizar a operação JOIN com chaves di­fe­ren­tes, es­pe­ci­fi­cam-se os pa­râ­me­tros left_on e right_on:

# Unir con diferentes nombres de columnas clave
result = pd.merge(df3, df4, how='inner', left_on='Clave', right_on='Clave2')
print(result)
python

Ao utilizar ex­pli­ci­ta­mente left_on='Clave' e right_on='Clave2', as colunas-chave cor­res­pon­den­tes são uti­li­za­das para realizar a junção.

Clave  Valor1 Clave2 Valor2
0     B        2        B        4
1     C        3        C        5

Uti­li­za­ção de índices como chave

Também pode utilizar os índices dos Da­ta­Fra­mes como chave para a junção, con­fi­gu­rando os pa­râ­me­tros left_index e right_index em True. Primeiro, são criados dois novos Da­ta­Fra­mes com índices:

df5 = pd.DataFrame({
    'Valor1': [1, 2, 3]
}, index=['A', 'B', 'C'])
df6 = pd.DataFrame({
    'Valor2': [4, 5, 6]
}, index=['B', 'C', 'D'])
print(df5)
print(df6)
python

Com o código anterior, são gerados os seguintes Da­ta­Fra­mes:

Valor1
A        1
B        2
C        3
    Valor2
B        4
C        5
D        6

Agora é possível realizar uma operação de junção baseada em índices com Pandas merge():

# Unir con índices
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)
python

O resultado, como era de se esperar, é uma união ou JOIN baseada nos índices dos Da­ta­Fra­mes:

Valor1  Valor2
B        2        4
C        3        5
Ir para o menu principal