Skip to content

Como concatenar dois Pandas DataFrames: Explicado!

Updated on

Pandas é uma das ferramentas open-source mais populares para Ciência de Dados. Ele fornece estruturas de DataFrame que oferecem desempenho de alto nível para manipulação, limpeza, análise e visualização de dados tabulares. Em Pandas, é comum ter que mesclar dois ou mais DataFrames para alcançar algum tipo de análise nos dados. Podemos fazer isso combinando os DataFrames verticalmente ou horizontalmente. Aqui, ilustramos e discutimos ambos os métodos em detalhes.

Quer criar rapidamente visualizações de dados a partir de um Pandas Dataframe em Python sem código?

PyGWalker é uma biblioteca Python para Análise Exploratória de Dados com Visualização. PyGWalker (opens in a new tab) pode simplificar o fluxo de trabalho de análise e visualização de dados do seu notebook Jupyter, transformando seu dataframe pandas (e dataframe polar) em uma Interface do Usuário no estilo Tableau para exploração visual.

PyGWalker para visualização de dados (opens in a new tab)

Concatenando dois DataFrames verticalmente

Em Pandas, dois DataFrames podem ser concatenados usando o método concat(). Para demonstrar isso, vamos começar criando dois exemplos de DataFrames. No primeiro DataFrame de exemplo, digamos que temos informações sobre alguns funcionários em uma empresa:

import pandas as pd
 
# Criando DataFrame 1
df1 = pd.DataFrame({
    'Nome': ['John', 'Jack', 'Steve', 'Sarah'],
    'Idade': [24, 32, 19, 29],
    'Gênero': ['M', 'M', 'M', 'F']
})

Isso criará um DataFrame que se parece com isso:

    Nome    Idade Gênero
0   John    24     M
1   Jack    32     M
2   Steve   19     M
3   Sarah   29     F

Digamos que temos outro DataFrame que contém informações sobre os departamentos da empresa:

# Criando DataFrame 2
df2 = pd.DataFrame({
    'Departamento': ['Marketing', 'Vendas', 'Recursos Humanos'],
    'Funcionários': [15, 12, 10],
})

Isso criará um DataFrame que se parece com isso:

        Departamento    Funcionários
0       Marketing        15
1           Vendas        12
2   Recursos Humanos     10

Agora, podemos usar o método concat() para combinar os dois DataFrames verticalmente:

# Concatenando verticalmente
df3 = pd.concat([df1, df2], axis=0)

Aqui, o parâmetro axis=0 denota que queremos concatenar os DataFrames empilhando-os um em cima do outro (ou seja, verticalmente). Após a concatenação, obtemos a seguinte saída:

        Nome    Idade Gênero   Departamento    Funcionários
0       John    24      M     NaN          NaN
1       Jack    32      M     NaN          NaN
2      Steve    19      M     NaN          NaN
3      Sarah    29      F     NaN          NaN
0       NaN     NaN    NaN    Marketing     15
1       NaN     NaN    NaN    Vendas        12
2       NaN     NaN    NaN    Recursos Humanos 10

Podemos ver que os dois DataFrames são concatenados conforme desejado, mas há alguns valores NaN (nulos) no novo DataFrame onde os nomes das colunas não correspondem. Podemos descartar essas linhas se elas não se encaixarem em nossa análise de dados, ou podemos fornecer alguns valores padrão para preencher os valores nulos.

Concatenando dois DataFrames horizontalmente

Também podemos concatenar dois DataFrames horizontalmente (ou seja, combiná-los lado a lado) usando o método concat(), como este:

# Concatenando horizontalmente
df4 = pd.concat([df1, df2], axis=1)

Aqui, o parâmetro axis=1 denota que queremos concatenar os DataFrames colocando-os lado a lado (ou seja, horizontalmente). Depois de conConcatenando DataFrames com Pandas

Pandas é uma das bibliotecas de análise de dados mais populares em Python, usada por inúmeros cientistas de dados e analistas de dados em todo o mundo. A concatenação de DataFrames é uma das principais operações na manipulação de dados com Pandas. É uma técnica simples, mas muito importante para unir diferentes fontes de dados em um único DataFrame. Este guia fornecerá uma visão geral de como concatenar Pandas DataFrames vertical e horizontalmente.

Concatenando DataFrames Verticalmente

Ao concatenar DataFrames verticalmente, os índices de ambos os DataFrames são mantidos e as colunas são adicionadas uma sobre a outra. Considere os seguintes dois DataFrames:

# Creating DataFrame 1
df1 = pd.DataFrame({
    'Name': ['John', 'Jack', 'Steve', 'Sarah'],
    'Age': [24, 32, 19, 29],
    'Gender': ['M', 'M', 'M', 'F']
})
 
# Creating DataFrame 2
df2 = pd.DataFrame({
    'Department': ['Marketing', 'Sales', 'Human Resources'],
    'Employees': [15, 12, 10]
})

Isso criará dois Pandas DataFrames, df1 e df2, que se parecem com isto:

    Name    Age Gender
0   John    24     M
1   Jack    32     M
2   Steve   19     M
3   Sarah   29     F

    Department       Employees
0   Marketing          15
1   Sales              12
2   Human Resources    10

Para concatenar esses DataFrames verticalmente, podemos usar o método concat() de Pandas:

# Concatenate df1 and df2 vertically
df3 = pd.concat([df1, df2], axis=0)

Ao especificar o parâmetro axis como 0, estamos concatenando os DataFrames verticalmente. Depois de concatenar, obtemos a seguinte saída:

        Name    Age Gender      Department    Employees
    0   John    24     M           NaN         NaN
    1   Jack    32     M           NaN         NaN
    2   Steve   19     M           NaN         NaN
    3   Sarah   29     F           NaN         NaN
    0   NaN     NaN   NaN         Marketing    15
    1   NaN     NaN   NaN         Sales        12
    2   NaN     NaN   NaN         Human Resources  10

Observe que a concatenação criou um novo DataFrame df3 com a concatenação de índices e a adição de colunas de ambos os DataFrames originais. As colunas que não existem em um dos DataFrames foram preenchidas com valores NaN. Se quisermos eliminar essas linhas em branco, podemos usar o método dropna():

# Drop the rows with null values
df3 = df3.dropna()

A saída após eliminar as linhas em branco será semelhante a isto:

   Name    Age    Gender     Department   Employees
0  John    24      M          Marketing      15.0
1  Jack    32      M          Sales          12.0
2  Steve   19      M          Human Resources  10.0

Observe que agora temos um novo DataFrame df3 que contém os dados concatenados dos DataFrames df1 e df2 sem nenhum valor NaN em branco.

Concatenando DataFrames Horizontalmente

Ao concatenar DataFrames horizontalmente, as colunas de ambos os DataFrames são mantidas e as linhas são adicionadas uma abaixo da outra. Considere os seguintes dois DataFrames:

# Creating DataFrame 1
df1 = pd.DataFrame({
    'Name': ['John', 'Jack', 'Steve', 'Sarah'],
    'Age': [24, 32, 19, 29],
    'Gender': ['M', 'M', 'M', 'F']
})
 
# Creating DataFrame 2
df4 = pd.DataFrame({
    'Department': ['Marketing', 'Sales'],
    'Employees': [15, 12]
})

Isso criará dois Pandas DataFrames, df1 e df4, que se parecem com isto:

    Name    Age Gender
0   John    24     M
1   Jack    32     M
2   Steve   19     M
3   Sarah   29     F

    Department      Employees
0   Marketing       15
1   Sales           12

Para concatenar os dois DataFrames horizontalmente, podemos usar o método concat() de Pandas, especificando o parâmetro axis como 1:

# Concatenate df1 and df4 horizontally
df5 = pd.concat([df1, df4], axis=1)

Após a concatenação, obtemos a seguinte saída:

    Name    Age Gender     Department   Employees
0   John    24     M        Marketing      15
1   Jack    32     M        Sales          12
2   Steve   19     M        NaN             NaN
3   Sarah   29     F        NaN             NaN

Podemos ver que os dois DataFrames são concatenados horizontalmente conforme desejado. No entanto, temos alguns valores NaN (nulos) no novo DataFrame onde os nomes das linhas não correspondem. Novamente, podemos descartar essas linhas se elas não se encaixarem na nossa análise de dados, ou podemos fornecer alguns valores padrão para preencher os valores nulos.

Concatenando DataFrames com Colunas Diferentes

O que acontece se os dois DataFrames a serem concatenados tiverem colunas diferentes? Nesses casos, Pandas identificará os nomes das colunas que não correspondem e os adicionará ao novo DataFrame como colunas separadas. Vamos ilustrar isso com um exemplo:

# Creating DataFrame with different columns
df5 = pd.DataFrame({
    'Employee Name': ['John', 'Jack', 'Steve', 'Sarah'],
    'Employee Age': [24, 32, 19, 29],
    'Job Title': ['Manager', 'Assistant', 'Clerk', 'Executive']
})

Isso criará um DataFrame que se parece com isso:

    Employee Name   Employee Age    Job Title
0       John          24             Manager
1       Jack          32             Assistant
2       Steve         19             Clerk
3       Sarah         29             Executive

Agora podemos concatenar df1 e df5:

# Concatenate df1 and df5
df6 = pd.concat([df1, df5], axis=1)

Após a concatenação, obtemos a seguinte saída:

    Name    Age Gender  Employee Name   Employee Age    Job Title
0   John    24     M       John          24             Manager
1   Jack    32     M       Jack          32             Assistant
2   Steve   19     M       Steve         19             Clerk
3   Sarah   29     F       Sarah         29             Executive

Como podemos ver, o Pandas concatena os dois DataFrames adicionando as colunas que não correspondem como colunas separadas no novo DataFrame.

Ignorando o Índice ao Concatenar DataFrames Horizontalmente

Ao concatenar dois DataFrames horizontalmente, o novo DataFrame mantém os índices originais dos dois DataFrames. Isso pode causar problemas ao trabalhar com este novo DataFrame. Assim, pode ser necessário em alguns casos ignorar o índice ao concatenar horizontalmente. Podemos fazer isso definindo o parâmetro ignore_index como True ao concatenar:

# Concatenate df1 and df2, ignoring the index
df7 = pd.concat([df1, df2], axis=1, ignore_index=True)

Após a concatenação, obtemos a seguinte saída:

    0       1   2   3               4
0   John    24  M   Marketing      15
1   Jack    32  M   Sales          12
2   Steve   19  M   Human Resources 10
3   Sarah   29  F   NaN             NaN

Agora o novo DataFrame tem um novo índice, que é mais conveniente para análise de dados adicionais.

Conclusão

A concatenação de Pandas DataFrames vertical ou horizontalmente nos fornece uma maneira eficiente de unir dados para análise. Com este guia, cobrimos os conceitos básicos da concatenação usando o método concat(). Com prática e mais conhecimento de DataFrames do Pandas, você será capaz de pegar grandes quantidades de dados e transformá-los em insights. Se você estiver interessado em aprender mais sobre Pandas, confira