Como unir DataFrames com Pandas merge() em Python
A função Pandas DataFrame.merge() é utilizada para unir dois DataFrames com base em chaves (keys) comuns. Desta forma, pode combinar dados de diferentes fontes de maneira eficiente para realizar análises mais completas.
Sintaxe da função Pandas merge()
A função Pandas DataFrame.merge() da Biblioteca Python Pandas aceita uma ampla variedade de parâmetros que afetam a forma como os DataFrames são combinados. 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)pythonParâmetros relevantes
Com os diferentes parâmetros aceites pela função Pandas merge(), não só especifica os DataFrames que deseja combinar, mas também o tipo de união (também chamado de join em inglês) e outros detalhes adicionais.
| Parâmetro | Descrição | Valor predefinido |
|---|---|---|
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 DataFrames | |
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 resultantes do DataFrame são ordenadas de forma lexicográfica
|
False
|
suffixes
|
Sufixos utilizados para tornar únicas as colunas com nomes duplicados | ("_x", "_y")
|
copy
|
Se for False, não é feita uma cópia
|
True
|
Como utilizar o Pandas merge()
Apresentamos uma série de exemplos que o ajudarão a compreender como funciona o Pandas merge().
INNER JOIN ou união interna
Um INNER JOIN ou junção interna une dois DataFrames do Pandas e retorna apenas as linhas em que as chaves coincidem em ambos os DataFrames. Primeiro, criaremos dois DataFrames 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)pythonOs dois DataFrames resultantes 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 6Agora pode realizar um INNER JOIN utilizando a função die merge():
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Clave')
print(result)pythonA saída mostra que, neste exemplo, apenas as linhas com as chaves B e C são incluídas no DataFrame resultante, uma vez que estas estão presentes em ambos os DataFrames originais.
Clave Valor1 Valor2
0 B 2 4
1 C 3 5OUTER JOIN ou união externa
Uma OUTER JOIN ou junção externa também une dois DataFrames. Ao contrário da junção interna (INNER JOIN), com a junção externa todas as linhas são devolvidas e os valores em falta são preenchidos com NaN.
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Clave')
print(result)pythonComo era de se esperar, o DataFrame resultante inclui todas as linhas de ambos os DataFrames. 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 preenchidos 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.0As restantes variantes de JOIN que incluímos na tabela anterior funcionam de forma análoga.
Utilização de left_on e right_on
Às vezes, os dois DataFrames têm nomes de colunas-chave diferentes. Nesse caso, pode usar os parâmetros left_on e right_on para especificar quais colunas devem ser utilizadas. Para isso, primeiro deve criar dois novos DataFrames:
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)pythonOs dois DataFrames resultantes 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 6Para realizar a operação JOIN com chaves diferentes, especificam-se os parâmetros 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)pythonAo utilizar explicitamente left_on='Clave' e right_on='Clave2', as colunas-chave correspondentes são utilizadas para realizar a junção.
Clave Valor1 Clave2 Valor2
0 B 2 B 4
1 C 3 C 5Utilização de índices como chave
Também pode utilizar os índices dos DataFrames como chave para a junção, configurando os parâmetros left_index e right_index em True. Primeiro, são criados dois novos DataFrames 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)pythonCom o código anterior, são gerados os seguintes DataFrames:
Valor1
A 1
B 2
C 3
Valor2
B 4
C 5
D 6Agora é 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)pythonO resultado, como era de se esperar, é uma união ou JOIN baseada nos índices dos DataFrames:
Valor1 Valor2
B 2 4
C 3 5