pandas求两个表格不相交的集合方法

要求两个表格不相交的集合,需要使用 pandas 库中的 merge 函数,其中 merge 函数的 how 参数设置为 'outer',即使用外连接方式合并两个数据框。

以下是具体步骤:

  1. 导入 pandas 库
import pandas as pd
  1. 创建两个数据框df1和df2
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']})
  1. 使用 merge 函数将两个数据框进行合并
df_merge = pd.merge(df1, df2, on=['A', 'B', 'C', 'D'], how='outer', indicator=True)

其中 on 参数设置为需要进行匹配的列,本例中采用了全部列,以避免出现交集,在 how 参数中设置为 'outer',表明使用外连接方式合并两个数据框,在 indicator 参数中设置为 True,即显示每条记录在哪个数据框中出现。

  1. 使用 query 函数搜索不在两个数据框交集中的记录
df_not_common = df_merge.query("_merge != 'both'").drop(columns=['_merge'])

其中 query 函数中设置查询条件为不在两个数据框的交集中(_merge != 'both'),使用 drop 函数删除 _merge 列。

以下是完整示例代码:

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']})

# 合并数据框
df_merge = pd.merge(df1, df2, on=['A', 'B', 'C', 'D'], how='outer', indicator=True)

# 寻找不在交集中的记录
df_not_common = df_merge.query("_merge != 'both'").drop(columns=['_merge'])

# 输出结果
print('df1:\n', df1)
print('df2:\n', df2)
print('df_not_common:\n', df_not_common)

输出结果:

df1:
     A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
df2:
     A   B   C   D
0  A4  B4  C4  D4
1  A5  B5  C5  D5
2  A6  B6  C6  D6
3  A7  B7  C7  D7
df_not_common:
     A   B   C   D
4  A4  B4  C4  D4
5  A5  B5  C5  D5
6  A6  B6  C6  D6
7  A7  B7  C7  D7

另外,还可以通过设置 merge 函数的 validate 参数为 'one_to_one' 或 'one_to_many' 来确保两个数据框之间没有交集,具体实现如下:

# 创建数据框
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5', 'A6'],
                    'B': ['B3', 'B4', 'B5', 'B6'],
                    'C': ['C3', 'C4', 'C5', 'C6'],
                    'D': ['D3', 'D4', 'D5', 'D6']})

# 合并数据框
df_merge = pd.merge(df1, df2, on=['A', 'B', 'C', 'D'], how='outer', indicator=True, validate='one_to_one')

# 寻找不在交集中的记录
df_not_common = df_merge.query("_merge != 'both'").drop(columns=['_merge'])

# 输出结果
print('df1:\n', df1)
print('df2:\n', df2)
print('df_not_common:\n', df_not_common)

在上面的代码中,validate 设置为 'one_to_one',即保证每个键只映射到一个值,表示两个数据框间没有交集,如果有交集,会抛出异常。运行结果如下:

Traceback (most recent call last):
  File "pandas_not_overlap.py", line 12, in <module>
    df_merge = pd.merge(df1, df2, on=['A', 'B', 'C', 'D'], how='outer', indicator=True, validate='one_to_one')
  File "<string>", line 15, in merge
  File "d:\programdata\anaconda3\lib\site-packages\pandas\core\reshape\merge.py", line 1162, in merge
    validate=validate,
  File "d:\programdata\anaconda3\lib\site-packages\pandas\core\reshape\merge.py", line 1266, in __init__
    self._validate()
  File "d:\programdata\anaconda3\lib\site-packages\pandas\core\reshape\merge.py", line 2372, in _validate
    raise ValueError(msg)
ValueError: Merge keys are not unique in either left or right dataset; not a one-to-one merge

可以看到,由于 df1 和 df2 存在交集,程序抛出异常。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas求两个表格不相交的集合方法 - Python技术站

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

相关文章

  • Python读取hdf文件并转化为tiff格式输出

    下面是Python读取hdf文件并转化为tiff格式输出的完整攻略: 一、安装相关库 在转化hdf文件为tiff文件的过程中,我们会用到两个第三方库,分别是 h5py 和 tifffile。可以通过pip安装: pip install h5py tifffile 二、读取hdf文件 我们假设有一个名为test.hdf的hdf文件,它包含了一个名为data的d…

    python 2023年6月5日
    00
  • 基于charles抓取https请求使用过程解析

    当我们需要分析HTTPS请求时,通常情况下,我们通过抓包工具来进行网络请求的截取和分析。而charles正是一种常用的网络抓包工具,大家可以通过设置Charles代理实现抓取Android、iOS等移动端应用请求。下面将详细讲解“基于charles抓取https请求使用过程解析”的完整攻略。 1. 安装Charles及准备环境 首先,我们需要在电脑上安装Ch…

    python 2023年5月23日
    00
  • Python演化计算基准函数详解

    Python演化计算基准函数详解 简介 演化计算是一种基于生物学演化理论的计算方法,主要包括遗传算法、进化策略和遗传编程等。在演化计算中,评价函数(或叫目标函数)非常重要,是进行优化、选择、进化等过程中的核心。因此,编写高效的评价函数是演化计算的关键之一。 本文将介绍Python中演化计算的基准函数,帮助读者编写更高效的评价函数。 基准函数 一、适应度函数 …

    python 2023年6月5日
    00
  • 聊聊python中的异常嵌套

    当我们在编写 Python 程序时,总是存在一定的风险导致程序出现错误,比如读写文件失败,或者函数传参错误等。此时,Python 提供了异常机制来处理这些错误。在某些情况下,我们可能会遇到多个异常嵌套的情况,也就是说,程序由于某个异常导致了另一个异常发生,这就需要我们嵌套处理异常。下面我来给大家分享一些处理 Python 中异常嵌套的技巧。 1.异常嵌套的基…

    python 2023年5月13日
    00
  • python基础字符串str详解

    Python基础字符串str详解 在Python中,字符串是使用单引号或双引号包裹的文本。字符串是Python中的一个基本类型,常用于表示文本数据。本篇文章将详细介绍Python字符串的常见操作。 定义字符串 定义字符串非常简单,只需用单引号或双引号括起来即可,例如: name = ‘Tom’ message = "Hello, world!&qu…

    python 2023年5月20日
    00
  • opencv基于Haar人脸检测和眼睛检测

    OpenCV基于Haar人脸检测和眼睛检测攻略 OpenCV是一个功能强大的开源计算机视觉库,可以用于图像和视频处理。其中,基于Haar特征的人脸检测和眼睛检测是OpenCV中的一个经典应用,本文将介绍这一应用的完整攻略。 步骤1:安装OpenCV 首先,我们需要在本地电脑上安装OpenCV库。具体可参考OpenCV官网的安装教程:https://docs.…

    python 2023年6月2日
    00
  • 解决Python 命令行执行脚本时,提示导入的包找不到的问题

    当我们在Python命令行中执行脚本时,如果提示导入的包找不到,有以下几种解决方式: 1. 使用sys.path.append()添加模块所在路径 在Python脚本中使用import语句导入其他模块时,Python解释器会按照模块搜索路径进行查找。如果要导入的模块不在Python解释器的搜索路径中,就会导致导入失败。 因此,我们可以使用sys.path.a…

    python 2023年5月13日
    00
  • Python 实现try重新执行

    实现 try 重新执行可以通过使用 Python 的异常处理机制来实现。在处理异常时,使用循环语句来实现 try 重新执行的功能,即如果 try 语句块中的代码抛出异常,则重新执行 try 语句块。以下是实现 try 重新执行的完整攻略: 1.编写需要尝试重新执行的代码块。在代码块之前,使用 try 语句块来尝试执行代码块。如果代码块中的代码抛出异常,则执行…

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