联接数据
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
联接两个数据集
类别: 数据转换/操作
模块概述
本文介绍如何使用机器学习 Studio 中的联接数据模块 (经典) ,使用数据库样式的联接操作来合并两个数据集。
若要在两个数据集上执行联接,它们必须通过 单个 键列进行关联。 不支持复合键。
如何配置“联接数据”
在机器学习 Studio (经典) ,添加要合并的数据集,然后将 "联接数据" 模块拖放到试验中。
可以在“数据转换”类别下的“操作”中找到此模块。
将数据集连接到联接数据模块。
联接数据模块不支持右外部联接,因此,如果要确保输出中包含特定数据集中的行,则该数据集必须位于 lefthand 输入中。
单击 " 启动列选择器 ",为左侧输入的数据集选择单个键列。
单击 " 启动列选择器 ",为右侧输入的数据集选择单个键列。
如果要联接文本列并想要确保联接保持区分大小写,请选择 "区分 大小写 " 选项。
例如,如果选择此选项,
A1000
则将被视为不同的键值a1000
。如果取消选择此选项,则 不 会强制区分大小写,并
A1000
将其视为与相同a1000
。使用“联接类型”下拉列表指定应当如何组合数据集。 各种
内部联接: 内部联接 是典型的联接操作。 仅当键列的值匹配时,它才会返回组合的行。
左外部联接:“左外部联接”为左表中的所有行返回联接的行。 如果左侧表中的某行在右侧表中没有匹配的行,则返回的行包含右侧表中所有列的缺失值,除非你为缺失值指定了替换值。
完全外部联接:“完全外部联接”返回来自左表 (table1) 和来自右表 (table2) 的所有行。
对于左表中没有右表中没有匹配行的每个行,联接结果包含一个行,该行包含右表中的缺失值。
对于右表中没有左表中没有匹配行的每个行,联接结果包含一个行,该行包含左表中所有列的缺失值。
左半联接:当键列的值匹配时,“左半联接”只返回左表中的值。
对于选项,请 在已联接的表中保留右键列:
- 取消选择此选项可获取结果中的单个键列。
- 保持选中该选项,以查看两个输入表中的键。
运行试验,或选择 "连接数据" 模块,并选择所选的 " 运行" 以执行联接。
若要查看结果,请右键单击 联接数据 模块,选择 " 结果数据集",然后单击 " 可视化"。
示例
可以在 Azure AI 库中查看如何使用此模块的示例:
电影建议:已联接两个数据集,以便我们可以显示建议的电影标题,而不是电影 ID。
技术说明
本部分介绍了实现的详细信息以及一些常见问题的答案。
限制
组合的数据集不能包含两个同名的列。 如果左侧和右侧的数据集包含重复的列名称,则会将数字后缀追加到适当数据集的列名,使其保持唯一。
例如,如果两个数据集都有一个名为 Month 的列,则左侧数据集中的列将保持原样,而右侧数据集中的列将被重命名为 Month (1) 。
用于比较键值的算法是哈希强制的。
如果输入数据集的列是分类列,联接数据集的每个对应列都将保留分类类型。
在左外部联接中,如果有任何缺失值,将针对缺失值在左侧数据集中创建分类级别。 即使联接(右侧)数据集中没有任何缺失值,情况也是如此。
如何联接复合键的表?
如果需要联接使用组合键的表 (即,主键依赖于两个独立的列) ,请使用如下所示的模块连接两个键列的内容:
-
例如,在 R 脚本中使用类似于以下的代码,以使用连字符作为分隔符连接输入数据帧的第一列和第二列。
paste(inputdf$Col1,inputdf$Col2,sep="-")
-
SQLite 中的串联运算符为
||
。
如何联接没有键的表?
如果你的数据集没有键列,仍可以通过生成键或使用 " 添加列 " 模块将其与另一个数据集组合。
" 添加列 " 模块的行为类似于 R,如果数据集具有相同的行数,则可以逐行合并两个数据集。 如果数据集的大小不同,则会引发错误。
预期输入
名称 | 类型 | 说明 |
---|---|---|
Dataset1 | 数据表 | 要联接的第一个数据集 |
Dataset2 | 数据表 | 要联接的第二个数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
L 的联接键列 | 任意 | ColumnSelection | 选择第一个数据集的联接键列。 | |
R 的联接键列 | 任意 | ColumnSelection | 选择第二个数据集的联接键列。 | |
匹配大小写 | 任意 | 布尔 | True | 指示是否允许对键列执行区分大小写的比较。 |
联接类型 | 列表 | 类型 | 内部联接 | 选择联接类型。 |
在联接表中保留右键列 | 任意 | 布尔 | True | 指示是否在联接的数据集中保留第二个数据集的键列。 |
输出
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 联接操作的结果 |
例外
异常 | 描述 |
---|---|
错误 0001 | 如果找不到数据集的一个或多个指定列,则会发生异常。 |
错误 0003 | 如果一个或多个输入为 null 或为空,则会发生异常。 |
错误 0006 | 如果参数为大于或等于指定值,则会发生异常。 |
错误 0016 | 如果传递给模块的输入数据集应该具有兼容的列类型但并非如此,则会发生异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
错误 0020 | 如果传递给模块的某些数据集中的列数太少,则会发生异常。 |
错误 0028 | 如果列集包含重复的列名称,但不允许重复的名称,则会发生异常。 |
错误 0011 | 如果传递的列集参数不适用于任何数据集列,则会发生异常。 |
错误 0027 | 如果两个对象必须具有相同的大小,但其大小却不相同,则会发生异常。 |
有关特定于工作室和经典 (模块) 的列表,请参阅机器学习代码。
有关 API 异常的列表,请参阅机器学习 REST API代码。