如何用 Pandas 比较两个数据框?
DataFrame 是由行和列组成的二维结构,其中数据以管状形式存储。它在大小和异构表格数据方面是可变的。也可以对行和列标签执行算术运算。
了解更多关于Pandas DataFrame 的创建。
在这里,我们将看到如何使用 pandas.DataFrame.compare 比较两个 DataFrame。
Syntax:
DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
So, let’s understand each of its parameters –
- other : This is the first parameter which actually takes the DataFrame object to be compared with the present DataFrame.
- align_axis : It deals with the axis(vertical / horizontal) where the comparison is to be made(by default False).0 or index : Here the output of the differences are presented vertically, 1 or columns : The output of the differences are displayed horizontally.
- keep_shape : It means that whether we want all the data values to be displayed in the output or only the ones with distinct value. It is of bool type and the default value for it is “false”, i.e. it displays all the values in the table by default.
- keep_equal : This is mainly for displaying same or equal values in the output when set to True. If it is made false then it will display the equal values as NANs.
Returns another DataFrame with the differences between the two dataFrames.
在开始之前,一个重要的注意事项是 pandas 版本必须至少为 1.1.0。
要检查这一点,请在您的 cmd 或 Anaconda navigator cmd 上运行它。
import pandas as pd
print(pd.__version__)
如果它是 1.1.0 或更高版本,您就可以开始了!否则,您可以通过以管理员身份运行的命令将 pandas 兼容版本安装到您的窗口 cmd 中,或者如果将其添加到路径中,则安装到您的 Anaconda 导航器中。
# if you want the latest version available
pip install pandas --upgrade
# or if you want to specify the version
pip install pandas==1.1.0
执行:
第 1 步:我们将创建我们的第一个数据框。
方法:
- 为 DataFrame 导入熊猫
- 为任何可以通过操作或插入出现的 NAN 值导入 NumPy
- 使用 pandas.DataFrame 创建 DataFrames 并传递行、列的值
- 指定列标题(来自您在字典中传递的值)
Python3
# pandas version == 1.1.0 (min)
import pandas as pd
import numpy as np
# create your first DataFrame
# using pd.DataFrame
first_df = pd.DataFrame(
{
"Stationary": ["Pens", "Scales",
"Pencils", "Geometry Box",
"Crayon Set"],
"Price": [100, 50, 25, 100, 65],
"Quantity": [10, 5, 5, 2, 1]
},
columns=["Stationary", "Price", "Quantity"],
)
# Display the df
first_df
Python3
# creating the second dataFrame by
# copying and modifying the first DataFrame
second_df = first_df.copy()
# loc specifies the location,
# here 0th index of Price Column
second_df.loc[0, 'Price'] = 150
second_df.loc[1, 'Price'] = 70
second_df.loc[2, 'Price'] = 30
second_df.loc[0, 'Quantity'] = 15
second_df.loc[1, 'Quantity'] = 7
second_df.loc[2, 'Quantity'] = 6
# display the df
second_df
Python3
#Align the differences on the columns
first_df.compare(second_df)
Python3
# align the differences on rows
first_df.compare(second_df,align_axis=0)
Python3
# Keep the equal values
first_df.compare(second_df, keep_equal=True)
Python3
# Keep the equal values False
first_df.compare(second_df, keep_equal=False)
Python3
#Keep all original rows and columns
first_df.compare(second_df,keep_shape=True)
Python3
#Keep all original rows and columns and
#also all original values
first_df.compare(second_df,keep_shape=True, keep_equal=True)
输出:
第 2 步:现在,让我们找出下一个 DataFrame 来比较它们的值:
蟒蛇3
# creating the second dataFrame by
# copying and modifying the first DataFrame
second_df = first_df.copy()
# loc specifies the location,
# here 0th index of Price Column
second_df.loc[0, 'Price'] = 150
second_df.loc[1, 'Price'] = 70
second_df.loc[2, 'Price'] = 30
second_df.loc[0, 'Quantity'] = 15
second_df.loc[1, 'Quantity'] = 7
second_df.loc[2, 'Quantity'] = 6
# display the df
second_df
输出:
我们通过复制 first_DataFrame 的表结构并进行某些修改来创建另一个 DataFrame。现在,让我们看看 second_DataFrame 的内容
第 3 步:让我们做我们的主要操作——比较。
这里我们执行了两个操作,首先对齐列中变化的差异,为此align_axis默认设置为1,表格将与从self和other交替绘制的列。
蟒蛇3
#Align the differences on the columns
first_df.compare(second_df)
输出:
其次,我们设置了 align_axis = 0,这使得表格行从自己和其他人交替绘制。
蟒蛇3
# align the differences on rows
first_df.compare(second_df,align_axis=0)
输出:
第 4 步:让我们尝试将相等的值设置为 true 和 false。
如果 keep_equal 为真,则结果也保持相等的值。否则,相等的值显示为 NaN。默认情况下,它设置为 False。
蟒蛇3
# Keep the equal values
first_df.compare(second_df, keep_equal=True)
输出:
蟒蛇3
# Keep the equal values False
first_df.compare(second_df, keep_equal=False)
输出:
第 5 步:现在让我们检查默认情况下为 false 的 keep_shape。如果设置为 true,则所有行和列都存在于表中,否则仅保留具有不同值的行和列。
蟒蛇3
#Keep all original rows and columns
first_df.compare(second_df,keep_shape=True)
输出:
蟒蛇3
#Keep all original rows and columns and
#also all original values
first_df.compare(second_df,keep_shape=True, keep_equal=True)
输出:
在这里,keep_shape true 将保留结构并将所有未更改的值设置为 nan。而 keep_shape 和 keep_equal true 将保留表的整个结构以及未更改的值
注意:在比较两个 DataFrame 之前,请确保第一个 DataFrame 中的记录数与第二个 DataFrame 中的记录数匹配。如果不是这样,您将收到一个值错误,即:
ValueError:只能比较标记相同的系列对象