删除重复的行
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
从数据集中删除重复行
类别: 数据转换/操作
模块概述
本文介绍如何使用机器学习 Studio 中的 "删除重复行" 模块 (经典) ,从数据集中删除可能的重复项。
例如,假设数据看上去如下所示,其中包含了多个患者记录。
PatientID | Initials | 性别 | Age | 入院时间 |
---|---|---|---|---|
1 | F.M. | M | 53 | 一月 |
2 | F.A.M. | M | 53 | 一月 |
3 | F.A.M. | M | 24 | 一月 |
3 | F.M. | M | 24 | 二月 |
4 | F.M. | M | 23 | 二月 |
F.M. | M | 23 | ||
5 | F.A.M. | M | 53 |
显然,这个示例有多个列,其中可能有重复的数据。 它们是否确实是重复项取决于你对数据的了解。
例如,你可能知道许多患者具有相同的姓名。 不使用任何姓名列消除重复项,仅使用“ID”列进行消除。 这样,无论患者是否具有相同的姓名,都只会筛选出具有重复 ID 值的行。
或者,你可以决定在 ID 字段中允许重复,并使用字段的其他组合来查找唯一记录,如名字、姓氏、年龄和性别。
若要设置用于判断行是否重复的条件,请将一列或一组列指定为键。 仅当两行的所有键列中的值相等时,才会将两行视为重复。
运行该模块时,它将创建一个候选数据集,并返回一组在指定列集中没有重复项的行。
重要
源数据集不会更改;此模块创建一个新的数据集,该数据集是根据指定条件排除了重复项而筛选出来的。
如何使用“删除重复行”
向试验中添加模块。 可以在“数据转换”、“操作”下找到“删除重复行”模板 。
连接要检查其是否有重复行的数据集。
在“属性”窗格的“键列选择筛选器表达式”下,单击“启动列选择器”,选择用于标识重复项的列 。
在此上下文中,“键”并不表示唯一标识符。 使用“列选择器”选择的所有列都指定为“键列”。 所有未选定的列都被视为非键列。 所选择的作为键的列的组合确定了记录的唯一性。 (将其视为使用多个相等联接的 SQL 语句。 )
示例:
- “我想要确保 ID 是唯一的”:仅选择“ID”列。
- “我想要确保名字、姓氏和 ID 的组合是唯一的”:选中所有三个列。
使用“保留第一个重复行”复选框指示在找到重复项时要返回的行:
- 如果选择此选项,则返回第一行,丢弃其他行。
- 如果取消选择此选项,则最后一个重复行将保留在结果中,而丢弃其他行。
有关如何处理 missinng 值的信息,请参阅 技术说明 部分。
运行试验,或单击模块并选择 " 运行所选项"。
若要查看结果,请右键单击该模块,选择“结果数据集”,然后单击“可视化”。
提示
如果结果难以理解,或者想要排除某些列,则可以使用选择数据集中的列模块来删除列。
示例
若要查看如何使用此模块的示例,请参阅 Azure AI 库:
乳腺癌症检测: 删除重复行 用于在添加特征列后合并训练和测试数据集。
电影建议:使用 " 删除重复行 " 以确保每个电影只有一个用户 评级 。
Twitter 情绪分析: 删除重复行 仅适用于 "ID" 和 "受欢迎程度" 列,以确保每个电影只有一个 序号排名 值。 换句话说,电影不能同时为1和3,因此即使用户对影片进行了不同的排名,也会使用单个值。
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
实现详细信息
该模块的工作原理是循环遍历输入数据集的所有行。 它收集到候选输出数据集中首次显示键列值的唯一组合的所有行。
独立于行进行过滤的结果将被保留列数组类型。 你不能通过过滤掉无效的值而强制该数组为特定的数据类型;列数组类型取决于列中的所有值。 在过滤缺失值时,此限制也适用。
用于比较数据值的算法是哈希强制的。
缺少值
输入数据集可能在非键列和键列中缺少值。 这些规则适用于缺失值:
缺失值被视为键列中的有效值。 这两个键中都可以存在缺失值。
在稀疏数据集中,仅当缺失值等于稀疏值的默认表示形式时,才将其视为相等。
在键列中,缺失值被视为等于其他缺失值,但不等于非缺失值。
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
键列选择过滤表达式 | any | ColumnSelection | 选择搜索重复项时要使用的键列。 | |
保留第一个重复行 | any | 布尔 | 是 | 指示是否要保留一组重复项的第一行并放弃其他行。 如果为 False,则保留所遇到的最后一个重复行。 |
输出
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 过滤的数据集 |
例外
异常 | 描述 |
---|---|
错误 0003 | 如果一个或多个输入数据集为 null 或为空,则会发生异常。 |
错误 0020 | 如果传递给模块的某些数据集中的列数太少,则会发生异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
有关特定于工作室和经典 (模块) 的列表,请参阅机器学习代码。
有关 API 异常的列表,请参阅机器学习 REST API代码。