📜  如何用 Pandas 比较两个数据框?

📅  最后修改于: 2022-05-13 01:55:10.072000             🧑  作者: Mango

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

DataFrame 是由行和列组成的二维结构,其中数据以管状形式存储。它在大小和异构表格数据方面是可变的。也可以对行和列标签执行算术运算。

了解更多关于Pandas DataFrame 的创建。

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

在开始之前,一个重要的注意事项是 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 步:我们将创建我们的第一个数据框。

方法:

  1. 为 DataFrame 导入熊猫
  2. 为任何可以通过操作或插入出现的 NAN 值导入 NumPy
  3. 使用 pandas.DataFrame 创建 DataFrames 并传递行、列的值
  4. 指定列标题(来自您在字典中传递的值)
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:只能比较标记相同的系列对象