Comparar el objeto DataFrame de Pandas
Este tutorial explica cómo podemos comparar objetos Pandas DataFrame en Python. Podemos comparar DataFrames usando el 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)
Producción :
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
Utilizaremos los DataFrames df_1
y df_2
para demostrar la comparación de DataFrames en este artículo.
Comparar el objeto DataFrame de Pandas usando el 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 los elementos correspondientes de df_1
ad df_2
y devuelve True
si los elementos correspondientes de esa posición son iguales, en caso contrario devuelve False
.
Podemos utilizar el método pandas.DataFrame.all()
para saber qué filas son iguales en df_1
y 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))
Producción :
0 False
1 True
2 True
3 False
4 True
dtype: bool
Las filas con valor True
en la salida tienen el mismo valor que los elementos correspondientes. Por lo tanto, las filas con valor False
en la salida tienen valores diferentes de los elementos correspondientes.
Podemos utilizar la indexación para listar todas las filas cuyos valores difieren en df_1
y 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])
Producción :
Player Goals
0 Lewandowski 10
3 Messi 5
Enumera todas las filas de df_1
, que tienen valores diferentes a las filas correspondientes en df_2
.
Si tenemos índices diferentes para df_1
y df_2
, obtenemos un error que dice ValueError: Sólo se pueden comparar objetos DataFrame con etiquetas idénticas
.
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 el método pandas.DataFrame.reset_index()
para restablecer los índices y superar el problema anterior.
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)
Producción :
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Restablece el índice de df_2
antes de comparar df_1
y df_2
para que dos dataframes tengan los mismos índices y sea posible la comparación.
También debemos asegurarnos de que tenemos el mismo número de filas en los DataFrames antes de compararlos.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArtículo relacionado - Pandas DataFrame
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma