Fundir Pandas DataFrames no Índice
-
Utilize
merge()
para combinar dois DataFrames Pandas no índice -
Utilize
join()
para combinar dois DataFrames Pandas no índice
No mundo da Ciência de Dados e Aprendizagem de Máquinas, é essencial ser fluente nas operações de organização, manutenção, e limpeza de dados para uma análise mais aprofundada. A fusão de dois DataFrames é um exemplo de uma dessas operações. Acontece que é fácil combinar dois DataFrames usando a biblioteca Pandas em Python.
Pandas fornece-nos duas funções úteis, merge()
e join()
para combinar dois DataFrames. Ambos os métodos são muito semelhantes mas o merge()
é considerado mais versátil e flexível. Também fornece muitos parâmetros para alterar o comportamento da DataFrame final. O método join()
combina os dois DataFrames nos seus índices, enquanto que o método merge()
permite-nos especificar as colunas que podem funcionar como chave para fundir dois DataFrames.
Um parâmetro comum de ambas as funções sobre o qual se deve estar familiarizado é how
, que define o tipo de junção. Por defeito, o parâmetro how
é inner
para merge()
e left
para join()
, mas para ambas pode ser alterado para left
, right
, inner
, e outer
. É essencial conhecer a diferença entre todas elas.
Ao combinarmos dois DataFrames Pandas, assumimos que um é o DataFrame Esquerdo e o outro é o DataFrame Direito. Tanto o merge()
como o join()
correspondem aos registos das colunas chave. O inner
join devolve um DataFrame de registos que coincidem em ambos os DataFrames. O join outer
produz um DataFrame fundido com todos os elementos em ambos os DataFrames, preenchendo NaN para valores em falta em ambos os lados. A união left
contém todos os elementos da DataFrame esquerda, mas apenas os registos coincidentes da DataFrame direita. O oposto de left
é right
, que contém todos os elementos da DataFrame direita e apenas os registos coincidentes da DataFrame esquerda. Tudo isto será mais claro no código de exemplo nas próximas secções onde combinaremos os DataFrames no código abaixo:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
print(df1)
print(df2)
Resultado:
C1
1 a
2 b
4 d
5 e
7 h
C2
1 AA
2 BB
3 CC
5 EE
6 FF
Utilize merge()
para combinar dois DataFrames Pandas no índice
Ao fundir dois DataFrames no índice, o valor dos parâmetros left_index
e right_index
da função merge()
deve ser True
. O seguinte exemplo de código combinará dois DataFrames com inner
como o tipo de junção:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)
print(df_inner)
Resultado:
C1 C2
1 a AA
2 b BB
5 e EE
O seguinte código irá fundir os DataFrames com o tipo de join como outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)
print(df_outer)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Como pode ver, o DataFrame fundido com o tipo de join como inner
só tem registos correspondentes de ambos os DataFrames, enquanto o que tem outer
join tem todos os elementos presentes neles, preenchendo os registos em falta com NaN
. Agora, usando a junção left
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_left = df1.merge(df2, how="left", left_index=True, right_index=True)
print(df_left)
Resultado:
C1 C2
1 a AA
2 b BB
4 d NaN
5 e EE
7 h NaN
O DataFrame fundido acima tem todos os elementos da DataFrame esquerda, e apenas os registos correspondentes da DataFrame direita. O seu oposto exacto é a junção right
, como se mostra abaixo:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_right = df1.merge(df2, how="right", left_index=True, right_index=True)
print(df_right)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
5 e EE
6 NaN FF
Utilize join()
para combinar dois DataFrames Pandas no índice
O método join()
combina os dois DataFrames com base nos seus índices, e por defeito, o tipo de join é left
. Utiliza sempre o índice DataFrame da direita, mas podemos mencionar a chave para DataFrame da esquerda. Podemos especificar os tipos de junção para join()
função idêntica à que mencionamos para merge()
.
O exemplo a seguir mostra DataFrame mesclado com tipo de junção outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)
Resultado:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedInArtigo relacionado - Pandas DataFrame
- Como obter os cabeçalhos da coluna Pandas DataFrame como uma lista
- Como eliminar a coluna Pandas DataFrame
- Como Converter a Coluna DataFrame para DataTempo em Pandas
- Como Converter um Flutuador em um Inteiro em Pandas DataFrame
- Como Classificar Pandas DataFrame pelos Valores de uma Coluna
- Como Obter o Agregado de Pandas Group-By e Sum