Python

Dominando o Merge no Pandas: Guia Prático com Exemplos

Escrito por Erick Faria · 4 min. >
merge no pandas

Neste post, exploramos o método merge() do pandas e como ele é uma ferramenta valiosa para manipular DataFrames. Demonstramos seu uso em situações diversas, desde a combinação de dados relacionados até a preparação de dados para modelagem. Discutimos também o poder do merge() para lidar com dados ausentes e evitar redundância de dados. Ilustramos cada situação com exemplos e dicas práticas, ajudando você a entender quando e como usar o merge() em seus próprios projetos.

Merge no Pandas

O merge no pandas é uma ferramenta poderosa que permite combinar DataFrames ou objetos da série em um único DataFrame, semelhante ao que você faria em um banco de dados SQL. A função merge é um dos métodos mais comuns e úteis para combinar conjuntos de dados.

O merge é usado quando queremos combinar linhas de dois ou mais DataFrames com base em uma chave comum (ou conjunto de chaves), que pode ser um nome de coluna ou um índice. Isso permite juntar informações relacionadas que estão distribuídas em diferentes tabelas, proporcionando uma visão mais completa e útil dos dados.

Por exemplo, você pode ter um DataFrame contendo detalhes de vários produtos e outro DataFrame contendo detalhes das vendas desses produtos. Se quisesse saber quais produtos foram mais vendidos, você poderia fazer um merge dos dois DataFrames em um único DataFrame, combinando-os nas colunas que contêm os identificadores do produto. Desta forma, cada linha da tabela de vendas seria combinada com a linha correspondente da tabela de produtos, fornecendo todos os detalhes em uma única tabela.

O pandas fornece várias opções para controlar o comportamento do merge, permitindo especificar como lidar com índices, quais colunas usar para o merge, e como lidar com valores ausentes ou duplicados. Isso torna o merge uma ferramenta extremamente flexível e poderosa para a manipulação de dados.

Quando devo usar o Merge no Pandas?

O método merge() no pandas é uma ferramenta extremamente versátil que pode ser utilizada em diversas situações ao lidar com DataFrames. Vamos explorar algumas situações em que o uso de merge() pode ser particularmente útil.

Combinação de Dados Relacionados

Suponha que você esteja trabalhando em um projeto de análise de vendas e tenha dois conjuntos de dados: um contendo informações detalhadas sobre os produtos (como nome, preço, categoria) e outro contendo informações sobre vendas (como produto vendido, quantidade, data da venda). Nesse caso, você pode querer combinar esses dois conjuntos de dados para ter uma visão completa das vendas, incluindo detalhes do produto. Aqui, merge() é a ferramenta perfeita para o trabalho, permitindo que você combine os DataFrames baseados em uma coluna comum, como ‘ProdutoID’.

Lidar com Dados Ausentes

Quando combinamos DataFrames com merge(), podemos escolher diferentes tipos de ‘joins’: ‘inner’, ‘outer’, ‘left’ e ‘right’. Isso nos dá controle sobre como lidar com os valores ausentes. Por exemplo, se quisermos manter todas as linhas dos dois DataFrames, mesmo se houver valores ausentes, podemos usar um ‘outer join’. Se quisermos manter apenas as linhas onde há correspondência em ambos os DataFrames, podemos usar um ‘inner join’. Essa flexibilidade é extremamente útil ao lidar com dados reais, que muitas vezes estão cheios de lacunas e inconsistências.

Evitando Redundância de Dados

Suponha que você esteja trabalhando com um grande conjunto de dados de um estudo de saúde pública, onde cada linha representa um paciente e suas características, e você tem um DataFrame separado contendo informações de contato desses pacientes. Se quiser enviar um lembrete para os pacientes sobre um check-up de saúde, você precisará das informações de contato deles. Nesse caso, em vez de copiar as informações de contato para o DataFrame principal, o que tornaria seus dados redundantes e pesados, você pode simplesmente usar merge() para combinar temporariamente os DataFrames quando necessário.

Preparação de Dados para Modelagem

Na ciência de dados, muitas vezes precisamos preparar nossos dados antes de modelá-los. Isso pode incluir a combinação de diferentes fontes de dados em um único DataFrame que possa ser alimentado em um modelo de aprendizado de máquina. merge() é frequentemente uma parte crucial desse processo de preparação de dados, permitindo que você junte dados de diferentes fontes de maneira eficiente e precisa.

Exemplo de Merge no Pandas

# Importando a biblioteca pandas
import pandas as pd

# Criando um dicionário com detalhes dos produtos
data_produtos = {
    'ProdutoID': ['P1', 'P2', 'P3', 'P4'],
    'Nome': ['Produto1', 'Produto2', 'Produto3', 'Produto4'],
    'Preco': [100, 200, 150, 50]
}

# Transformando o dicionário em um DataFrame
df_produtos = pd.DataFrame(data_produtos)

# Imprimindo o DataFrame
print(df_produtos)
# Criando um dicionário com detalhes das vendas
data_vendas = {
    'ProdutoID': ['P1', 'P2', 'P2', 'P3', 'P4', 'P4', 'P4'],
    'Quantidade': [10, 20, 30, 15, 10, 20, 30]
}

# Transformando o dicionário em um DataFrame
df_vendas = pd.DataFrame(data_vendas)

# Imprimindo o DataFrame
print(df_vendas)
# Fazendo o merge dos DataFrames
df_total = pd.merge(df_produtos, df_vendas, on='ProdutoID')

# Imprimindo o DataFrame resultante
print(df_total)

Diferença entre Merge e Join no Pandas

Tanto join() quanto merge() são métodos oferecidos pelo pandas para combinar DataFrames de maneira eficiente. Embora essas duas funções sejam frequentemente usadas para atingir objetivos semelhantes, elas têm algumas diferenças importantes em termos de como operam e quando devem ser usadas.

O método merge() é a ferramenta mais geral e poderosa para combinar DataFrames. Ele permite combinar DataFrames com base em uma ou mais chaves (colunas ou índices) que são comuns entre os DataFrames. Com merge(), você tem controle total sobre quais colunas ou índices usar para a combinação, e também pode especificar como lidar com valores ausentes e duplicados. O merge() é muito semelhante à operação JOIN em SQL.

Por outro lado, o método join() é uma forma mais conveniente e simplificada de combinar DataFrames. Ele foi projetado especificamente para permitir a combinação de diferentes DataFrames com base em seus índices. Enquanto merge() requer que você especifique explicitamente a chave (ou chaves) para a combinação, join() usa os índices dos DataFrames por padrão. Isso pode tornar o join() mais fácil de usar em situações em que você está combinando DataFrames com base em seus índices. Além disso, join() permite combinar múltiplos DataFrames em uma única operação, enquanto merge() só pode combinar dois DataFrames de cada vez.

Apesar dessas diferenças, é importante notar que join() é na verdade baseado em merge(). Sob o capô, join() usa merge(), mas fornece uma interface mais fácil de usar para situações comuns.

A escolha entre usar join() ou merge() geralmente depende da situação específica. Se você está combinando DataFrames com base em seus índices, e a operação de combinação é relativamente simples, então join() pode ser a escolha mais conveniente. No entanto, se você precisa de mais controle sobre a combinação, ou está combinando DataFrames com base em colunas que não são índices, então merge() provavelmente será a melhor escolha.

Escrito por Erick Faria
Engenheiro de Dados com Ph.D. em Geografia e experiência em análise espacial e geoprocessamento. Expertise em processamento de grandes volumes de dados geoespaciais, imagens de satélite e dados de mercado, utilizando ferramentas como Spark, Databricks e Google Earth Engine. Experiência em projetos de mercado de carbono, modelos preditivos para investimentos agrícolas e liderança de projetos de dados em saúde pública. Habilidades em Python, R, SQL e diversas ferramentas de engenharia de dados. Profile