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+unittest+DDT实现数据驱动测试

    Python + unittest + DDT 实现数据驱动测试 数据驱动测试是一种测试方法,通过使用不同的数据集来执行相同的操作,从而验证应用程序的行为是否正确。在Python中,我们可以使用unittest和DDT库来快速实现数据驱动测试。 步骤 下面是使用Python+unittest+DDT实现数据驱动测试的步骤: 将测试数据存储在一个文件中,例如C…

    python 2023年5月14日
    00
  • Python中set与frozenset方法和区别详解

    Python中set与frozenset方法和区别详解 1. set方法 在Python中set是一种可变的集合类型,用大括号{}括起来,集合中的元素是无序的且不允许重复。set中的元素必须是不可变的数据类型(如字符串、数字等)。 创建set 我们可以使用以下几种方式来创建set: 直接使用花括号{}创建 使用内置函数set()创建 如下所示: # 直接使用…

    python 2023年5月14日
    00
  • Pandas出现KeyError的问题解决及分析

    以下是关于“Pandas出现KeyError的问题解决及分析”的完整攻略: 问题描述 在使用 Pandas 进行数据处理时,有会出现 KeyError 的错误,这个错误通常于 DataFrame 或 Series 中不存在指定的列名或索引名导致的。下面是一个例: import pandas as pd df = pd.DataFrameA’: [1, 2, …

    python 2023年5月13日
    00
  • 学习Python,你还不知道main函数吗

    学习 Python,你还不知道 main 函数吗? 在 Python 中,main 函数是一个特殊的函数,它通常用于测试和运行代码。main 函数是 Python 程序的入口点,即程序从哪里开始执行。 为什么要使用 main 函数? 使用 main 函数可以在测试时方便地运行您的代码,也可以增加代码的可读性。将代码封装在 main 函数中,能够使它更加易于理…

    python 2023年6月3日
    00
  • 查找列表中每个项目的 Python NLTK Wordnet Synsets

    【问题标题】:Find Python NLTK Wordnet Synsets for a each item of a list查找列表中每个项目的 Python NLTK Wordnet Synsets 【发布时间】:2023-04-07 03:26:02 【问题描述】: 我一直在学习基本的 python,但我是 NLTK 的新手。我想使用 nltk 为…

    Python开发 2023年4月8日
    00
  • Python爬取网站图片并保存的实现示例

    让我们来详细讲解一下 Python 爬取网站图片并保存的实现攻略。 一、思路 爬取网站图片并保存的思路大概分为以下几个步骤: 分析目标网站的 HTML 结构,找到图片的所在标签和属性; 获取网站内容; 解析网站内容,提取出图片的 URL; 下载图片到本地; 保存图片。 二、代码实现 1. 简单示例 下面是 Python 简单爬取图片的代码: import r…

    python 2023年6月3日
    00
  • python 在指定范围内随机生成不重复的n个数实例

    针对指定范围内随机生成不重复的n个数的问题,下面提供几种实现方法。 方法一:使用 random.sample() Python 的 random 模块提供了一个 sample() 方法,可以在指定范围内随机生成不重复的 n 个数。 import random start_num = 1 # 范围起始值 end_num = 100 # 范围终止值 n = 5 …

    python 2023年6月3日
    00
  • Python实现生成简单的Makefile文件代码示例

    生成Makefile文件是软件开发中的一个重要环节。Python作为一门高级语言,能够轻松地实现Makefile文件的自动生成。本文将提供一个Python代码示例,展示如何生成一个简单的Makefile文件。下面是详细的攻略: 1. 安装Python 首先,确保你的电脑上已经安装了Python。你需要在官网上下载并安装Python 3.x版本,这里我们以Py…

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