联接数据

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

联接两个数据集

类别: 数据转换/操作

注意

适用于:仅限机器学习 Studio (经典)

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何使用机器学习 Studio 中的联接数据模块 (经典) ,使用数据库样式的联接操作来合并两个数据集。

若要在两个数据集上执行联接,它们必须通过 单个 键列进行关联。 不支持复合键。

如何配置“联接数据”

  1. 在机器学习 Studio (经典) ,添加要合并的数据集,然后将 "联接数据" 模块拖放到试验中。

    可以在“数据转换”类别下的“操作”中找到此模块。

  2. 将数据集连接到联接数据模块。

    联接数据模块不支持右外部联接,因此,如果要确保输出中包含特定数据集中的行,则该数据集必须位于 lefthand 输入中。

  3. 单击 " 启动列选择器 ",为左侧输入的数据集选择单个键列。

  4. 单击 " 启动列选择器 ",为右侧输入的数据集选择单个键列。

  5. 如果要联接文本列并想要确保联接保持区分大小写,请选择 "区分 大小写 " 选项。

    例如,如果选择此选项, A1000 则将被视为不同的键值 a1000

    如果取消选择此选项,则 会强制区分大小写,并 A1000 将其视为与相同 a1000

  6. 使用“联接类型”下拉列表指定应当如何组合数据集。 各种

    • 内部联接内部联接 是典型的联接操作。 仅当键列的值匹配时,它才会返回组合的行。

    • 左外部联接:“左外部联接”为左表中的所有行返回联接的行。 如果左侧表中的某行在右侧表中没有匹配的行,则返回的行包含右侧表中所有列的缺失值,除非你为缺失值指定了替换值。

    • 完全外部联接:“完全外部联接”返回来自左表 (table1) 和来自右表 (table2) 的所有行。

      对于左表中没有右表中没有匹配行的每个行,联接结果包含一个行,该行包含右表中的缺失值。

      对于右表中没有左表中没有匹配行的每个行,联接结果包含一个行,该行包含左表中所有列的缺失值。

    • 左半联接:当键列的值匹配时,“左半联接”只返回左表中的值。

  7. 对于选项,请 在已联接的表中保留右键列

    • 取消选择此选项可获取结果中的单个键列。
    • 保持选中该选项,以查看两个输入表中的键。
  8. 运行试验,或选择 "连接数据" 模块,并选择所选的 " 运行" 以执行联接。

  9. 若要查看结果,请右键单击 联接数据 模块,选择 " 结果数据集",然后单击 " 可视化"。

示例

可以在 Azure AI 库中查看如何使用此模块的示例:

技术说明

本部分介绍了实现的详细信息以及一些常见问题的答案。

限制

  • 组合的数据集不能包含两个同名的列。 如果左侧和右侧的数据集包含重复的列名称,则会将数字后缀追加到适当数据集的列名,使其保持唯一。

    例如,如果两个数据集都有一个名为 Month 的列,则左侧数据集中的列将保持原样,而右侧数据集中的列将被重命名为 Month (1) 。

  • 用于比较键值的算法是哈希强制的。

  • 如果输入数据集的列是分类列,联接数据集的每个对应列都将保留分类类型。

  • 在左外部联接中,如果有任何缺失值,将针对缺失值在左侧数据集中创建分类级别。 即使联接(右侧)数据集中没有任何缺失值,情况也是如此。

如何联接复合键的表?

如果需要联接使用组合键的表 (即,主键依赖于两个独立的列) ,请使用如下所示的模块连接两个键列的内容:

  • 执行 R 脚本

    例如,在 R 脚本中使用类似于以下的代码,以使用连字符作为分隔符连接输入数据帧的第一列和第二列。 paste(inputdf$Col1,inputdf$Col2,sep="-")

  • 应用 SQL 转换

    SQLite 中的串联运算符为 ||

如何联接没有键的表?

如果你的数据集没有键列,仍可以通过生成键或使用 " 添加列 " 模块将其与另一个数据集组合。

" 添加列 " 模块的行为类似于 R,如果数据集具有相同的行数,则可以逐行合并两个数据集。 如果数据集的大小不同,则会引发错误。

预期输入

名称 类型 说明
Dataset1 数据表 要联接的第一个数据集
Dataset2 数据表 要联接的第二个数据集

模块参数

名称 范围 类型 默认 说明
L 的联接键列 任意 ColumnSelection 选择第一个数据集的联接键列。
R 的联接键列 任意 ColumnSelection 选择第二个数据集的联接键列。
匹配大小写 任意 布尔 True 指示是否允许对键列执行区分大小写的比较。
联接类型 列表 类型 内部联接 选择联接类型。
在联接表中保留右键列 任意 布尔 True 指示是否在联接的数据集中保留第二个数据集的键列。

输出

名称 类型 说明
结果数据集 数据表 联接操作的结果

例外

异常 描述
错误 0001 如果找不到数据集的一个或多个指定列,则会发生异常。
错误 0003 如果一个或多个输入为 null 或为空,则会发生异常。
错误 0006 如果参数为大于或等于指定值,则会发生异常。
错误 0016 如果传递给模块的输入数据集应该具有兼容的列类型但并非如此,则会发生异常。
错误 0017 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。
错误 0020 如果传递给模块的某些数据集中的列数太少,则会发生异常。
错误 0028 如果列集包含重复的列名称,但不允许重复的名称,则会发生异常。
错误 0011 如果传递的列集参数不适用于任何数据集列,则会发生异常。
错误 0027 如果两个对象必须具有相同的大小,但其大小却不相同,则会发生异常。

有关特定于工作室和经典 (模块) 的列表,请参阅机器学习代码

有关 API 异常的列表,请参阅机器学习 REST API代码

另请参阅

操作
数据转换
A-Z 模块列表