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)
TestarExemplo 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)
TestarConcatenando 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)
TestarConcatenando 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
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
Comentários
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.