Tamanho de fonte
Alto contraste
Altura de linha

Como fazer um UNION com pandas

Avatar de Ana Maria Gomes Ana Maria Gomes
7 minutos de leitura 2 meses atrás

Se você já trabalhou com SQL, provavelmente está familiarizado com o comando UNION, que permite combinar os resultados de duas ou mais consultas SELECT. No mundo do Python, a biblioteca pandas oferece funcionalidades semelhantes para manipulação de dados. Neste artigo, vamos explorar como realizar operações de UNION com pandas, comparando com o SQL e apresentando exemplos práticos.

Introdução ao UNION no pandas

O UNION no pandas é uma operação que permite combinar dados de diferentes DataFrames. Assim como no SQL, podemos usar UNION para unir conjuntos de dados, seja para análise, visualização ou modelagem. No pandas, essa operação é realizada principalmente com o método concat(). Vamos entender melhor como isso funciona.

O que é o UNION no pandas?

No pandas, o equivalente ao comando UNION do SQL é realizado utilizando a função concat(). O UNION no SQL é usado para combinar os resultados de duas ou mais consultas SELECT em uma única tabela, eliminando duplicatas por padrão (UNION ALL inclui todas as linhas, mesmo as duplicadas). No pandas, concat() permite combinar DataFrames ao longo de um eixo (linha ou coluna), oferecendo flexibilidade para unir dados de diferentes fontes.

Comparado ao SQL, onde o UNION é uma operação específica para combinar conjuntos de resultados, o pandas oferece uma abordagem mais programática e flexível para manipulação de dados, permitindo não apenas a união, mas também a concatenação e mesclagem de DataFrames de várias maneiras.

Diferença entre UNION e UNION ALL

  • UNION: Remove duplicatas, retornando apenas linhas únicas.
  • UNION ALL: Mantém todas as linhas, incluindo duplicatas.

Comparação entre UNION no pandas e UNION no SQL

Para quem já está acostumado com SQL, entender como o UNION funciona no pandas pode ser mais fácil com uma comparação direta.

O que é o UNION no SQL?

No SQL, o UNION é usado para combinar os resultados de duas ou mais consultas SELECT. O UNION ALL, por sua vez, combina os resultados sem remover duplicatas.

Diferença entre UNION e UNION ALL no SQL

  • UNION: Combina os resultados de duas consultas e remove duplicatas.
  • UNION ALL: Combina os resultados de duas consultas sem remover duplicatas.

Comparação prática entre pandas e SQL

Vamos ver um exemplo prático de como realizar um UNION no SQL e no pandas.

SQL:

SELECT city, rank
FROM df1
UNION
SELECT city, rank
FROM df2;

pandas:

import pandas as pd

# DataFrame 1: Produtos e suas categorias e preços
df1 = pd.DataFrame({
    "product": ["Laptop", "Smartphone", "Tablet"],
    "category": ["Electronics", "Electronics", "Electronics"],
    "price": [1200, 800, 300]
})

# DataFrame 2: Produtos e suas categorias e preços
df2 = pd.DataFrame({
    "product": ["Laptop", "Smartwatch", "Camera"],
    "category": ["Electronics", "Wearables", "Photography"],
    "price": [1200, 250, 600]
})

# UNION ALL 
union_all_df = pd.concat([df1, df2], ignore_index=True)

# UNION 
union_df = pd.concat([df1, df2], ignore_index=True).drop_duplicates()

Como fazer UNION no pandas

Agora que entendemos a teoria, vamos ver como implementar o UNION no pandas usando o método concat().

Utilizando o método concat()

O método concat() é a principal ferramenta para realizar operações de UNION no pandas. Ele permite concatenar DataFrames ao longo de um eixo especificado.

Exemplo básico de UNION ALL com concat()

Vamos começar com um exemplo básico de UNION ALL, onde combinamos dois DataFrames sem remover duplicatas.

import pandas as pd

# DataFrame 1: Produtos, categorias e preços
df1 = pd.DataFrame({
    "product": ["Laptop", "Smartphone", "Tablet"],
    "category": ["Electronics", "Electronics", "Electronics"],
    "price": [1200, 800, 300]
})

# DataFrame 2: Produtos, categorias e preços
df2 = pd.DataFrame({
    "product": ["Laptop", "Smartwatch", "Camera"],
    "category": ["Electronics", "Wearables", "Photography"],
    "price": [1200, 250, 600]
})

# UNION ALL 
union_all_df = pd.concat([df1, df2], ignore_index=True)
print("UNION ALL - Produtos:")
print(union_all_df)
Testar

Exemplo básico de UNION com concat() e drop_duplicates()

Para realizar um UNION (removendo duplicatas), usamos concat() seguido de drop_duplicates().

# UNION
union_df = pd.concat([df1, df2], ignore_index=True).drop_duplicates()
print(union_df)

Exemplos práticos de UNION no pandas

Vamos explorar alguns exemplos práticos de como usar UNION no pandas em diferentes cenários.

Concatenando DataFrames com as mesmas colunas

Quando os DataFrames têm as mesmas colunas, a concatenação é direta.

import pandas as pd

# DataFrame 1: Informações sobre funcionários do Departamento A
df1 = pd.DataFrame({
    "Department": ["A", "A", "A"],
    "Employee": ["Carlos", "Fernanda", "João"],
    "Salary": [5000, 5500, 6000]
})

# DataFrame 2: Informações sobre funcionários do Departamento B
df2 = pd.DataFrame({
    "Department": ["B", "B", "B"],
    "Employee": ["Maria", "Pedro", "Ana"],
    "Salary": [5200, 5800, 6100]
})

# UNION ALL 
union_all_df = pd.concat([df1, df2], ignore_index=True)
print(union_all_df)
Testar

Concatenando DataFrames com colunas diferentes

Quando os DataFrames têm colunas diferentes, podemos usar o parâmetro join para especificar como lidar com as colunas.

import pandas as pd

# DataFrame 1: Veículos, preços e tipos de combustível
df1 = pd.DataFrame({
    "Vehicle": ["Carro", "Moto", "Caminhão"],
    "Price": [30000, 15000, 50000],
    "Fuel": ["Gasolina", "Gasolina", "Diesel"]
})

# DataFrame 2: Veículos, avaliações e tipos de transmissão
df2 = pd.DataFrame({
    "Vehicle": ["Carro", "Bicicleta", "Ônibus"],
    "Rating": [4.5, 4.8, 4.3],
    "Transmission": ["Automático", "Manual", "Automático"]
})

# UNION ALL com colunas diferentes
union_all_df = pd.concat([df1, df2], join='outer', ignore_index=True)
print(union_all_df)
Testar

Concatenando DataFrames e removendo duplicatas

Para remover duplicatas após a concatenação, usamos drop_duplicates().

# UNION com remoção de duplicatas
union_df = pd.concat([df1, df2], ignore_index=True).drop_duplicates()
print(union_df)

Considerações avançadas

Utilizando o parâmetro join no concat()

O parâmetro join permite especificar como lidar com colunas que não estão presentes em todos os DataFrames. As opções são inner (mantém apenas colunas comuns) e outer (mantém todas as colunas).

Performance e boas práticas

Ao trabalhar com grandes conjuntos de dados, é importante considerar a performance. O uso de concat() e drop_duplicates() pode ser custoso em termos de tempo e memória. Sempre que possível, tente otimizar suas operações e evitar duplicatas desnecessárias.

Conclusão

Neste artigo, exploramos como realizar operações de UNION no pandas, comparando com o SQL e apresentando exemplos práticos. Vimos como usar o método concat() para combinar DataFrames e como remover duplicatas com drop_duplicates(). Essas técnicas são essenciais para manipulação de dados em Python e podem ser aplicadas em diversos cenários.

Se você quiser continuar aprendendo sobre pandas e manipulação de dados, recomendamos explorar mais sobre operações de merge e join, além de outras funcionalidades avançadas da biblioteca. Bons estudos!

Referências

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov

Olá, boa tarde!


Realizei o pd.merge para juntar duas tabelas, porém existem linhas duplicadas mas com colunas diferente e com valores diferentes, eu preciso juntar essas linhas iguais porém sem excluir valor e sim somar os valore que está na mesma coluna.


Para o merge usei esse código:

merged_df = pd.merge(filtrotab, filtrotab25, how='outer', on='Plano')


Exemplo: tabela gerada:

Plano Autorizada 2024 Autorizada 2025

3339039 - OUTROS SERVIÇOS DE TERC 79000.00 5000.00

3339039 - OUTROS SERVIÇOS DE TERC 79000.00 79000.00

3339039 - OUTROS SERVIÇOS DE TERC 5000.00 5000.00

3339039 - OUTROS SERVIÇOS DE TERC 5000.00 79000.00


O que aconteceu: tanto na coluna Autorizada 2024 como na Autorizada 2025 os valores duplicarão, pois na tabela original deveria ter apenas 79000.00 e 5000.00 em ambas as colunas.

O que preciso: que apareça apenas uma vez 3339039 - OUTROS SERVIÇOS DE TERC e que some as colunas ficando em Autorizada 2024 e Autorizada 2025 o valor de 84000,00.


O comando que eu usei para tentar fazer isso: merged_df.drop_duplicates('Plano')

o que aconteceu:


Plano Autorizada 2024 Autorizada 2025

3339039 - OUTROS SERVIÇOS DE TERC 79000.00 5000.00


Sumindo com os demais valores e não somando os duplicados.



Avatar de Lissandra Pacheco
Lissandra Pacheco 23/10/2024