Guia Avançado do Método `merge` no Pandas com Exemplos
Francisco Júnior
Posted on August 17, 2023
O Pandas é uma biblioteca popular em Python utilizada para manipulação e análise de dados. Entre suas funcionalidades mais poderosas está o método merge
, que permite combinar dados de diferentes DataFrames com base em critérios específicos. Neste guia avançado, vamos explorar em detalhes o método merge
e fornecer exemplos práticos de seu uso.
Conteúdo
- Introdução ao Método
merge
- Tipos de Junções
- Inner Join
- Outer Join
- Left Join
- Right Join
- Especificando as Colunas de Junção
- Lidando com Conflitos de Nomes de Colunas
- Tratando Duplicatas
- Parâmetros Adicionais do Método
merge
- Exemplos Práticos
- Combinação de Dados de Clientes e Compras
- Fusão de Dados Temporais
- Junção de Dados de Funcionários e Departamentos
1. Introdução ao Método merge
O método merge
do Pandas é usado para combinar dois ou mais DataFrames com base em colunas comuns (colunas de junção). O resultado é um novo DataFrame que contém os dados combinados das tabelas originais. Essa operação é semelhante ao conceito de junção em SQL.
2. Tipos de Junções e Exemplos
Vamos explorar agora exemplos práticos de cada tipo de junção usando o método merge
.
- Inner Join
O inner join retorna apenas as linhas que possuem valores correspondentes nas duas tabelas.
import pandas as pd
df1 = pd.DataFrame({'chave': ['A', 'B', 'C'], 'valor_df1': [1, 2, 3]})
df2 = pd.DataFrame({'chave': ['B', 'C', 'D'], 'valor_df2': [4, 5, 6]})
resultado_inner = pd.merge(df1, df2, on='chave', how='inner')
print(resultado_inner)
- Outer Join
O outer join retorna todas as linhas das duas tabelas, preenchendo com valores nulos onde não houver correspondência.
resultado_outer = pd.merge(df1, df2, on='chave', how='outer')
print(resultado_outer)
- Left Join
O left join retorna todas as linhas da tabela da esquerda e as correspondentes da tabela da direita. As linhas da tabela da esquerda sem correspondência na tabela da direita terão valores nulos.
resultado_left = pd.merge(df1, df2, on='chave', how='left')
print(resultado_left)
- Right Join
O right join é o oposto do left join. Ele retorna todas as linhas da tabela da direita e as correspondentes da tabela da esquerda. Linhas da tabela da direita sem correspondência terão valores nulos.
resultado_right = pd.merge(df1, df2, on='chave', how='right')
print(resultado_right)
3. Especificando as Colunas de Junção
Você pode especificar as colunas de junção usando o parâmetro on
do método merge
. Se as colunas tiverem nomes diferentes nas tabelas, você pode usar os parâmetros left_on
e right_on
para especificar as colunas de junção de cada tabela.
Exemplo:
resultado_especifico = pd.merge(df1, df2, left_on='chave_df1', right_on='chave_df2', how='inner')
print(resultado_especifico)
4. Lidando com Conflitos de Nomes de Colunas
Quando você combina DataFrames que têm colunas com o mesmo nome, o Pandas adiciona sufixos _x
e _y
às colunas duplicadas. Você pode usar o parâmetro suffixes
para personalizar esses sufixos.
Exemplo:
resultado_sufixos = pd.merge(df1, df2, on='chave', how='inner', suffixes=('_esquerda', '_direita'))
print(resultado_sufixos)
5. Tratando Duplicatas
Se suas tabelas contiverem duplicatas nas colunas de junção, você pode usar o parâmetro validate
para verificar se as junções são válidas.
Exemplo:
resultado_com_duplicatas = pd.merge(df1, df2, on='chave', how='inner', validate='one_to_many')
print(resultado_com_duplicatas)
6. Parâmetros Adicionais do Método merge
Existem outros parâmetros que permitem maior controle sobre a junção, como how
(para especificar o tipo de junção), sort
(para ordenar o resultado) e indicator
(para criar uma coluna indicadora da origem dos dados).
Exemplo:
resultado_com_ordenacao = pd.merge(df1, df2, on='chave', how='inner', sort=True)
print(resultado_com_ordenacao)
7. Exemplos Práticos
- Combinação de Dados de Clientes e Compras
Imagine que você tem dois DataFrames: um contendo informações sobre clientes e outro contendo informações sobre compras. Você pode usar o método merge
para combinar esses dados com base no ID do cliente.
import pandas as pd
clientes = pd.DataFrame({
'ID_cliente': [1, 2, 3, 4],
'nome': ['Alice', 'Bob', 'Carol', 'David']
})
compras = pd.DataFrame({
'ID_cliente': [2, 3, 1, 4],
'valor': [100, 150, 200, 50]
})
resultado = pd.merge(clientes, compras, on='ID_cliente', how='inner')
print(resultado)
- Fusão de Dados Temporais
Você pode combinar dados temporais usando o método merge
, por exemplo, para rastrear alterações em uma entidade ao longo do tempo.
import pandas as pd
dados_antigos = pd.DataFrame({
'ID': [1, 2, 3],
'valor': [10, 20, 30],
'data': ['2023-01-01', '2023-02-01', '2023-03-01']
})
dados_novos = pd.DataFrame({
'ID': [1, 2, 3],
'valor': [15, 25, 35],
'data': ['2023-01-15', '2023-02-15', '2023-03-15']
})
resultado = pd.merge(dados_antigos, dados_novos, on='ID', suffixes=('_antigo', '_novo'))
print(resultado)
- Junção de Dados de Funcionários e Departamentos
Vamos supor que você tenha informações sobre funcionários e departamentos, e você deseja realizar uma junção para obter os detalhes de cada funcionário juntamente com o nome de seu departamento.
import pandas as pd
funcionarios = pd.DataFrame({
'ID_funcionario': [1, 2, 3, 4],
'nome': ['Alice', 'Bob', 'Carol', 'David'],
'ID_departamento': [101, 102, 101, 103]
})
departamentos = pd.DataFrame({
'ID_departamento': [101, 102, 103],
'nome_departamento': ['RH', 'Finanças', 'TI']
})
resultado = pd.merge(funcionarios, departamentos, on='ID_departamento', how='left')
print(resultado)
Conclusão
O método merge
do Pandas é uma ferramenta poderosa para combinar e enriquecer conjuntos de dados de diferentes fontes. Com a compreensão adequada dos tipos de junções e dos parâmetros disponíveis, você pode realizar operações complexas de combinação de dados de maneira eficaz e eficiente. Este guia forneceu uma visão abrangente do método merge
com exemplos práticos para ajudá-lo a dominar essa funcionalidade essencial do Pandas.
Posted on August 17, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.