Pandas DataFrame 객체 비교

Suraj Joshi 2021년2월9일
Pandas DataFrame 객체 비교

이 튜토리얼은 Python에서 Pandas DataFrame 객체를 비교하는 방법을 설명합니다. ==연산자를 사용하여 DataFrame을 비교할 수 있습니다.

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)

출력:

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

이 기사에서는 DataFrames df_1df_2를 사용하여 DataFrames 비교를 설명합니다.

==연산자를 사용하여 Pandas DataFrame 객체 비교

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)

출력:

   Player  Goals
0    True  False
1    True   True
2    True   True
3    True  False
4    True   True

df_1광고 df_2의 해당 요소를 비교하여 해당 위치의 해당 요소가 같으면 True를 반환하고 그렇지 않으면 False를 반환합니다.

pandas.DataFrame.all()메서드를 사용하여df_1df_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))

출력:

0    False
1     True
2     True
3    False
4     True
dtype: bool

출력에 True값이있는 행은 해당 요소와 동일한 값을 갖습니다. 따라서 출력에 False값이있는 행은 해당 요소의 값이 다릅니다.

인덱싱을 사용하여 값이df_1df_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])

출력:

        Player  Goals
0  Lewandowski     10
3        Messi      5

df_2의 해당 행과 다른 값을 가진 df_1의 모든 행을 나열합니다.

df_1df_2에 대해 서로 다른 인덱스가있는 경우ValueError: Can only compare same-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)

출력:

Traceback (most recent call last):
...
ValueError: Can only compare identically-labeled DataFrame objects

위의 문제를 극복하기 위해pandas.DataFrame.reset_index()메서드를 사용하여 인덱스를 재설정 할 수 있습니다.

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)

출력:

   Player  Goals
0    True  False
1    True   True
2    True   True
3    True  False
4    True   True

df_1df_2를 비교하기 전에 df_2의 색인을 재설정하여 비교가 가능하도록 두 데이터 프레임이 동일한 색인을 갖도록합니다.

또한 비교하기 전에 DataFrames에 동일한 수의 행이 있는지 확인해야합니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

관련 문장 - Pandas DataFrame