如何用Pandas比较两个数据帧

如何用Pandas比较两个数据帧

DataFrame是一个由行和列组成的二维结构,数据被存储成管状形式。它在大小方面是可变的,而且是异质的表格数据。运算操作也可以在行和列的标签上进行。

在这里,我们将看到如何用pandas.DataFrame.compare来比较两个DataFrames。

语法:

DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)

因此,让我们了解它的每个参数 –

  1. other:这是第一个参数,实际上是取要与当前数据框架进行比较的数据框架对象。

  2. align_axis : 它涉及到要进行比较的axis(垂直/水平)(默认为False)。0或index : 这里输出的差异是垂直显示的,1或列。差异的输出以水平方式显示。

  3. keep_shape : 它意味着我们是否希望在输出中显示所有的数据值,或者只显示有明显价值的数据。它是bool类型的,默认值是 “false”,即默认显示表中的所有数值。

  4. keep_equal : 当设置为True时,这主要是为了在输出中显示相同或相等的数值。如果它被设置为 “假”,那么它将把相等的值显示为NANs。

返回:另一个DataFrame,其中包括两个数据框架之间的差异。

在开始之前,一个重要的注意点是pandas的版本必须至少是1.1.0。

要检查这一点,在你的cmd或Anaconda导航器cmd上运行这个。

import pandas as pd
print(pd.__version__)

Python

如果是1.1.0或更高的版本,你就可以开始了!否则,你可以通过以管理员身份运行命令,将pandas兼容版本安装到你的窗口cmd中,或者如果它被添加到路径中,则安装到你的Anaconda导航器中。否则,你可以通过以管理员身份运行的命令将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
Python

实现:

第1步:我们将创建我们的第一个数据框架。

步骤:

1.为DataFrame导入pandas
2.输入NumPy以获取任何通过操作或插入而产生的NAN值。
3.使用pandas.DataFrame创建数据框架,并为你的行、列传递值。
4.指定列的标题(从你在字典中传递的值)。

# 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
Python

输出:

如何用Pandas比较两个数据帧?

第二步:现在,让我们制作出下一个DataFrame来比较它们的值。

# 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
Python

输出:

如何用Pandas比较两个数据帧?

我们通过复制第一个DataFrame的表结构并进行某些修改来创建另一个DataFrame。现在,让我们看看第二个DataFrame的内容

第三步:让我们做我们的主要操作–比较。

在这里,我们进行了两个操作,首先是对齐各列变化的差异,为此,align_axis默认设置为1,表格中的各列将从自己和对方交替绘制。

#Align the differences on the columns
first_df.compare(second_df)
Python

输出:

如何用Pandas比较两个数据帧?

其次,我们设置了align_axis = 0,这使得表格的行数从自己和他人交替绘制。

# align the differences on rows
first_df.compare(second_df,align_axis=0)
Python

输出:

如何用Pandas比较两个数据帧?

第4步:让我们尝试将相等的值设置为真和假。

如果keep_equal为真,结果也会保留相等的值。否则,相等的值会显示为NaN。默认情况下,它被设置为False。

# Keep the equal values
first_df.compare(second_df, keep_equal=True)
Python

输出:

如何用Pandas比较两个数据帧?

# Keep the equal values False
first_df.compare(second_df, keep_equal=False)
Python

输出:

如何用Pandas比较两个数据帧?

第5步:现在让我们检查keep_shape,它默认为false。如果它被设置为 “true”,那么所有的行和列都会出现在表中,否则就只保留那些有明显值的行和列。

#Keep all original rows and columns
first_df.compare(second_df,keep_shape=True)
Python

输出:

如何用Pandas比较两个数据帧?

#Keep all original rows and columns and
 #also all original values
first_df.compare(second_df,keep_shape=True, keep_equal=True) 
Python

输出:

如何用Pandas比较两个数据帧?

这里,keep_shape true将保持结构,并将所有未改变的值设置为nan。而keep_shape和keep_equal true将保留表的整个结构以及未被改变的值。

注意:在比较两个数据框架之前,确保第一个数据框架中的记录数与第二个数据框架中的记录数一致。如果不是这样,你将会得到一个值错误,这就是:

ValueError。只能比较标记相同的系列对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册