Comparar Pandas DataFrame Objectos
Este tutorial explica como podemos comparar objectos Pandas DataFrame em Python. Podemos comparar DataFrames utilizando o operador ==
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print("df_1:")
print(df_1)
print("")
print("df_2:")
print(df_2)
Resultado:
df_1:
Player Goals
0 Lewandowski 10
1 Haland 8
2 Ronaldo 6
3 Messi 5
4 Mbappe 4
df_2:
Player Goals
0 Lewandowski 7
1 Haland 8
2 Ronaldo 6
3 Messi 7
4 Mbappe 4
Vamos utilizar os campos DataFrames df_1
e df_2
para demonstrar a comparação de DataFrames neste artigo.
Comparar Pandas DataFrame Object utilizando o operador ==
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print(df_1 == df_2)
Resultado:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Compara os elementos correspondentes de df_1
ad df_2
e retorna True
se os elementos correspondentes dessa posição forem os mesmos, caso contrário retorna False
.
Podemos utilizar pandas.DataFrame.all()
método para saber que linhas são as mesmas tanto no df_1
como no df_2
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print((df_1 == df_2).all(axis=1))
Resultado:
0 False
1 True
2 True
3 False
4 True
dtype: bool
As linhas com valor True
na saída têm o mesmo valor que os elementos correspondentes. Assim, as linhas com valor False
na saída têm valores diferentes dos elementos correspondentes.
Podemos utilizar a indexação para listar todas as linhas cujos valores diferem em df_1
e df_2
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print(df_1[(df_1 == df_2).all(axis=1) == False])
Resultado:
Player Goals
0 Lewandowski 10
3 Messi 5
Lista todas as linhas de df_1
, que têm valores diferentes dos valores das linhas correspondentes em df_2
.
Se tivermos índices diferentes para df_1
e df_2
, obtemos um erro dizendo ValueError: Can only compare identically-labeled DataFrame objects
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2, index=["a", "b", "c", "d", "e"])
print(df_1 == df_2)
Resultado:
Traceback (most recent call last):
...
ValueError: Can only compare identically-labeled DataFrame objects
Podemos utilizar o método pandas.DataFrame.reset_index()
para repor os índices de forma a ultrapassar o problema acima referido.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2, index=["a", "b", "c", "d", "e"])
df_2.reset_index(drop=True, inplace=True)
print(df_1 == df_2)
Resultado:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Reinicia o índice de df_2
antes de comparar df_1
e df_2
, para que dois dataframes tenham os mesmos índices para tornar a comparação possível.
Também devemos certificar-nos de que temos os mesmos números de linhas em DataFrames antes de os compararmos.
Suraj Joshi is a backend software engineer at Matrice.ai.
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