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
