Python datacompy 找出两个DataFrames不同的地方

首先,Python datacompy是一个Python库,可以用于比较两个Pandas数据框架(DataFrames)。该应用程序比较不同数据框架中列的值和缺少的行。

下面是使用Python datacompy库执行数据框架比较的详细步骤。

安装Python datacompy

在开始之前,我们需要先安装Python datacompy库。可以使用以下命令在命令行中进行安装:

pip install datacompy

导入Python datacompy

安装了Python datacompy后,下一步就是将它导入我们的Python应用程序中。可以使用以下命令导入Python datacompy库:

import datacompy

加载数据框架

在Python中,数据框架可以使用Pandas库加载。例如,以下代码加载了名为df1和df2的两个数据框架:

import pandas as pd

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

数据框架比较

有了两个数据框架和Python datacompy库,我们就可以开始比较数据框架了。以下代码比较了df1和df2数据框架之间的差异:

compare = datacompy.Compare(
    df1,
    df2,
    join_columns='id',      # 指定join的列
    abs_tol=0.0001,         # 绝对容差值(absolute_tolerance),默认为0
    rel_tol=0.0001,         # 相对容差(percentage_tolerance或relative_tolerance),默认为0
    df1_name='Original',    # 第一个DataFrame的名称
    df2_name='New'          # 第二个DataFrame的名称
)

print(compare.report())

以上代码指定了一个join列“id”,用于连接两个数据框架。它还使用了绝对和相对容差值来确定两个值是否相等。

最后,compare.report()方法可打印两个数据框之间的差异。输出结果将提供详细的列比较、缺失值和非零计数。

以下是一个示例输出结果:

DataComPy Comparison
--------------------

DataFrame Summary
-----------------

  DataFrame  Columns  Rows
0  Original        4   100
1       New        4   105

Column Summary
--------------

Number of columns in common: 4
Number of columns in Original but not in New: 0
Number of columns in New but not in Original: 0

Row Summary
-----------

Matched on: id
Any duplicates on match column: No
Absolute Tolerance: 0.0001
Relative Tolerance: 0.0001
Number of rows in common: 98
Number of rows in Original but not in New: 2
Number of rows in New but not in Original: 7

Column Comparison
--------------
Column Comparison: id
Approximately 0.00% | 0 Values in Original but not in New
Approximately 0.00% | 0 Values in New but not in Original
Mismatched Values: 2

Column Comparison: name
Approximately 1.00% | 1 Values in Original but not in New
Approximately 0.00% | 0 Values in New but not in Original
Mismatched Values: 1

Column Comparison: age
Approximately 0.00% | 0 Values in Original but not in New
Approximately 3.81% | 4 Values in New but not in Original
Mismatched Values: 4

Column Comparison: gender
Approximately 0.00% | 0 Values in Original but not in New
Approximately 0.00% | 0 Values in New but not in Original
Mismatched Values: 0

在上面的示例中,可以看到有2行在原始数据框架中但不在新数据框架中,并且有7个行在新数据框架中但不在原始数据框架中。还可以看到,在“name”列和“age”列中有一些不同的值。

我们还可以将比较结果保存到一个新的数据框中。以下示例将比较结果存储在名为“df_diff”的新数据框中:

df_diff = compare.highlight_diffs()

highlight_diffs()方法返回一个包含两个数据框架之间差异的新数据框架。

如果想将特定的差异指定为过滤条件,则需要将highlight_diffs()方法与filter()方法一起使用。以下是一个示例:

diff_filter = datacompy.filters.ReplaceSubstringFilter(column='name', substr='Tom', match_entire=False) #只比较`name`列中不包括Tom的情况

df_diff_filtered = compare.highlight_diffs().filter(diff_filter)

示例 1

假设我们有以下两个数据框架:

DataFrame A:
 id |  name   | age
----|---------|----
  1 |   Tom   | 20
  2 |  Sarah  | 25
  3 |   Rick  | 30

DataFrame B:
 id |  name   | age
----|---------|----
  1 |   Tom   | 20
  2 |  Sarah  | 26
  3 |   Rick  | 35
  4 |   John  | 40

我们想比较这两个数据框架中的数据,并找出它们之间的差异。

请使用以下代码比较两个数据框,并将差异保存到名为“df_diff”的新数据框中:

import pandas as pd
import datacompy

df_A = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Tom', 'Sarah', 'Rick'],
    'age': [20, 25, 30]
})

df_B = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'name': ['Tom', 'Sarah', 'Rick', 'John'],
    'age': [20, 26, 35, 40]
})

compare = datacompy.Compare(
    df_A,
    df_B,
    join_columns='id',
    abs_tol=0.0001,
    rel_tol=0.0001,
    df1_name='Original',
    df2_name='New'
)

df_diff = compare.highlight_diffs()

最后,输出差异的内容:

print(df_diff)

输出结果如下:

     _merge  id  name_left name_right  age_left  age_right
2    right_only   4       NaN       John       NaN       40.0
8   column_mismatch  NaN       NaN        Rick       NaN       35.0
9       both    2     Sarah      Sarah      25.0      26.0
10  column_mismatch  NaN       NaN         Tom      NaN       20.0

在这个例子中,我们可以看到比较结果的每一行,以及左右两个数据框中各个数据列之间的差异。输出中包含了如下四种情况:

  • “_merge”列包含了左右数据框的状态:仅在左边出现、仅在右边出现、都出现等。
  • “id”列包含了匹配两个数据框其中一列的值。
  • “name_left”列包含了左边的数据框,而“name_right”则包含了右边的数据框。
  • “age_left”列包含了左边的数据框,而“age_right”则包含了右边的数据框。

示例 2

假设我们有以下两个数据框架:

DataFrame A:
 id |  name   | age
----|---------|----
  1 |   Tom   | 20
  2 |  Sarah  | 25
  3 |   Rick  | 30

DataFrame B:
 id |  name   | age
----|---------|----
  1 |   Tom   | 20
  2 |  Sarah  | 26
  3 |   Rick  | 35
  4 |   John  | 40

我们想比较这两个数据框架,并只查看“age”列中的差异。

下面的代码将按以下方式完成:

import pandas as pd
import datacompy

df_A = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Tom', 'Sarah', 'Rick'],
    'age': [20, 25, 30]
})

df_B = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'name': ['Tom', 'Sarah', 'Rick', 'John'],
    'age': [20, 26, 35, 40]
})

compare = datacompy.Compare(
    df_A,
    df_B,
    join_columns='id',
    abs_tol=0.0001,
    rel_tol=0.0001,
    df1_name='Original',
    df2_name='New'
)

diff_filter = datacompy.filters.NumericToleranceFilter(column='age', abs_tol=5, rel_tol=0) # 只比较绝对容差为5的情况

df_diff = compare.highlight_diffs().filter(diff_filter)

该示例中,NumericToleranceFilter()方法允许我们仅比较“age”列中绝对容差值为5的数据差异。在结果中,只有值“25”与“26”被视为差异。

输出结果如下:

      _merge  id name_left name_right  age_left  age_right
8    both    2    Sarah     Sarah        25         26

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python datacompy 找出两个DataFrames不同的地方 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 从Pandas数据框架中的行创建一个列表 Set 2

    要从Pandas数据框架中的行创建一个列表,可以使用Pandas的”.iloc”或者”.loc”方法来选择需要使用的行,然后使用列表推导式将每行的数据转化为一个列表。 下面是一个示例代码,假设有一个数据框架df,其中包含5列数字:A、B、C、D和E,我们需要把第2、3、4行数据提取出来,组成一个列表Set 2: import pandas as pd # 创…

    python-answer 2023年3月27日
    00
  • Python pandas求方差和标准差的方法实例

    了解你要求的内容,我将给出“Python pandas求方差和标准差的方法实例”的详细攻略。 1. 关于Pandas Pandas是一种开源的数据分析和处理工具。它提供了一组简单易用的数据结构和函数,可以大大简化我们的数据分析和处理过程。其中包括了非常多的统计学方法和函数。 2. 求方差和标准差 方差与标准差都是描述数据分散程度的统计量。方差描述数据偏离其平…

    python 2023年5月14日
    00
  • 用Pandas绘制时间序列图或线图

    当我们需要呈现时间序列数据时,Pandas提供了一些方便的绘图工具。这包括了时间序列图和线图。下面我来详细介绍如何用Pandas绘制时间序列图或线图的完整攻略,并提供相应的实例说明。 1.准备数据 Pandas中的时间序列数据一般是通过datetime来表示的。下面我们来生成一个简单的时间序列数据集,包括时间和数值两个维度。 import pandas as…

    python-answer 2023年3月27日
    00
  • 从列表或字典创建Pandas的DataFrame对象的方法

    从列表或字典创建Pandas的DataFrame对象是一种快捷且常见的方式,下面是具体步骤: 1. 导入所需库 import pandas as pd 2. 从列表创建DataFrame 列表中的每个元素将代表DataFrame中的一行数据,使用pandas.DataFrame()函数从列表创建DataFrame对象。 示例1: data = [ [1, ‘…

    python 2023年5月14日
    00
  • Pandas数据清洗函数总结

    《Pandas数据清洗函数总结》这篇文章主要是介绍Pandas中常用的数据清洗函数,其主要分为以下几个部分: 1.缺失值处理 在数据处理的过程中,经常会出现数据缺失的情况,我们需要使用相关的函数进行缺失值的处理。下面是常用的缺失值处理函数: isnull()/notnull()函数:返回布尔值,表示是否为缺失值。 dropna()函数:删除所有包含缺失值的行…

    python 2023年5月14日
    00
  • Pandas数据分析-pandas数据框的多层索引

    Pandas数据分析-pandas数据框的多层索引 在Pandas中,可以通过数据框的多层索引实现高纬度数据的处理和分析。这种多层次的索引在一维数据结构上是不可能实现的,因为一维数据结构只能有一个维度,而多层次的索引可以提供额外的维度。 在本文中,我们将全面介绍Pandas数据框的多层索引,并提供示例说明。 创建多层索引数据框 在Pandas中,可以通过多种…

    python 2023年5月14日
    00
  • python基础篇之pandas常用基本函数汇总

    Python基础篇之Pandas常用基本函数汇总 1. 背景介绍 Pandas是一种开放源代码的数据分析和处理工具,它被广泛应用于数据科学领域。在Pandas中,有许多常用的基本函数,本文将总结这些函数并提供示例演示。 2. 常用基本函数 以下是Pandas中常用的基本函数: 2.1 读取数据 read_csv():读取csv文件数据并转换成DataFram…

    python 2023年5月14日
    00
  • 如何利用Pandas查询选取数据

    下面是如何利用Pandas查询选取数据的完整攻略,包含以下几个部分: Pandas库介绍 Pandas数据结构介绍 Pandas查询选取数据的方法 示例说明 1. Pandas库介绍 Pandas是一个基于NumPy的数据处理库,提供了高效、易用的数据结构和数据分析工具,包括Series、DataFrame和Panel等数据结构。Pandas可以实现数据的导…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部