Python para iniciantes: do zero ao primeiro projeto
Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!
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.
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.
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.
Para quem já está acostumado com SQL, entender como o UNION funciona no pandas pode ser mais fácil com uma comparação direta.
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.
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()Agora que entendemos a teoria, vamos ver como implementar o UNION no pandas usando o método concat().
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.
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)
Testarconcat() 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)Vamos explorar alguns exemplos práticos de como usar UNION no pandas em diferentes cenários.
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)TestarQuando 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)
TestarPara 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)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).
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.
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!
Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!
Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!
Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!
Estudo aprofundado do potencial de LLMs multimodais: soluções, mecanismos e geração de valor Os Modelos de Linguagem de Grande Porte (LLMs) multimodais representam uma…
Quando se trata de visualização de dados em Python, o Matplotlib é uma das bibliotecas mais populares e poderosas disponíveis. Para cientistas de dados,…
Ter um portfólio online é essencial para se destacar no mercado. Se você atua na área de dados, tecnologia ou negócios, apresentar seus projetos…
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.
Você tentou merged_df = pd.cancat(filtrotab, filtrotab25, ignore_index=True).drop_duplicates() ?
Acredito que para fazer uma agregação de soma em qualquer coluna de uma DF, você dever utilizar métodos de agregação, não de união como por excemplo o group by.
Muito obrigado pelo conteúdo postado, ficou muito bom!
Obrigado pelo elogio, Carlos! Já repassei para a professora Ana Maria 🙂
Abraços!