在数据清洗与预处理链路中,分析师从业务系统导出的原始数据往往存在大量“脏数据”:测试账号生成的废弃单、退款冲红导致的负金额流水、重复推送产生的多版本打卡记录,以及混乱无序的导出排列。
如果采用传统手工方式,不仅需要在各个字段上反复设置复杂筛选、手动删除行、按键排重,而且极易误删正常业务数据,且无法形成可回溯、可自动复跑的工作流。
DT-Bot 的 「表操作」 算子专为解决此类整表行级结构治理而设计。它能够直接在当前数据表上执行高性能就地修改(In-Place Mutation),支持按照自然语言指令完成条件删行、智能去重、多维排序以及多步复合清洗,无需另存冗余的中间副本表,保持分析工作空间的整洁高效。
一、 核心能力与适用场景
「表操作」算子聚焦于表格的行集合裁剪与行呈现顺序重塑,覆盖以下四大核心能力:
| 核心能力 | 解决什么业务问题 | 典型业务场景 |
|---|---|---|
| 条件删行 | 依据数值大小、文本状态、包含关键字或空值等条件,批量剔除不符合要求的无效行。 | 剔除薪资低于底薪的临时工记录、清除金额小于 0 的退款冲红行、删除状态为“已取消/已作废”的异常订单。 |
| 智能按键去重 | 依据单列或多列复合主键识别重复记录,支持灵活选择保留首条、末条或指定列极值行。 | 员工打卡表按工号+打卡日期去重(仅留首次打卡);价目表按商品编码去重,仅保留生效日期最新的一条记录。 |
| 多维行序重排 | 对全表数据按照指定的一个或多个业务字段进行升序(从小到大)或降序(从大到小)排列。 | 销售订单按成交金额由高到低降序排布、流水明细按下单时间升序排列、员工名册按部门与职级多级排序。 |
| 多步复合流水线 | 在单个算子节点内,使用编号(1. 2. 3.)按序串联“删行 → 去重 → 排序”复合逻辑,一步到位。 | 月末对账前:先删除负数冲销行,再按订单号去重,最后按支付时间升序排列并直接交给下游对账。 |
二、 边界指南:它与相近算子有何区别?
在构建数据工作流时,理解算子之间的职责边界至关重要:
| 比较维度 | 「表操作」算子 | 「筛选器」算子 | 「行操作」算子 | 「表头整理」算子 |
|---|---|---|---|---|
| 主要定位 | 整表行集合与行序治理 | 抽取目标子集另存为新表 | 单元格内文本字符清洗 | 列结构与字段名称治理 |
| 输出机制 | 就地更新原表(原地裁剪/重排) | 保留源表,生成独立新表 | 就地更新原表(单元格级修改) | 就地或另存新表 |
| 典型动作 | 删行、去重、整表升降序排序 | 筛出符合条件的记录输出新底稿 | 去除空格、字符替换、正则提取 | 修改列名、剔除冗余列、调整列顺序 |
| 如何选择 | “把这表里的作废单直接删了,按时间排好继续往下走” | “从总订单表里挑出大额订单,单独拉一张表做专项分析” | “把客户名称列里的前后空格和特殊符号替换掉” | “把系统导出的英文字段名改回业务中文,删掉备用列” |
三、 提示词编写规范与公式
「表操作」算子支持自然语言直接表达,建议遵循以下标准的三要素编写公式:
【目标表范围】 + 【核心操作动作】 + 【具体判断规则与字段】
1. 目标表范围表达
- 单表精准点名:明确指定单张表名称,例如
“工资表” :...或处理天猫订单:...; - 批量范围匹配:支持利用前缀、后缀或包含关系批量处理多张表,例如
以 “对账_” 开头的表:...或所有包含 “明细” 的表:...; - 默认当前流转表:若提示词中未显式提及表名,算子将默认继承上一节点连线流入的数据表。
2. 核心操作动作表达
- 删行指令:
删除 ... 的行、剔除 ... 的记录、去掉 ... 的数据; - 去重指令:
按 ... 去重、重复行只留第一条、重复行只留最后一条、重复时保留生效日期最大的那一条; - 排序指令:
按 ... 从大到小排序(降序)、按 ... 从小到大排序(升序)、先按部门升序,再按金额降序。
3. 多步复合操作书写规范
当需要单节点连续执行多个动作时,必须采用分行编号列表(1. 2. 3.) 书写,系统会严格按照先后顺序流水线执行:
“订单表” :
1. 删除金额小于等于 0 的行
2. 按订单号去重,重复行只留第一条
3. 按下单时间升序排序
四、 核心功能与图解实战
以下结合真实企业数据场景,展示「表操作」在不同需求下的处理效果:
场景 1:精准条件删行(阈值与异常状态剔除)
业务背景:HR 部门统计正式工薪酬发放,需在底表里剔除月工资低于 5000 元的临时兼职工,且必须严格保留恰好等于 5000 元的正常员工。
【处理前:工资表】
| 工号 | 姓名 | 部门 | 工资 | 状态 |
|---|---|---|---|---|
| 001 | 张三 | 研发部 | 8000 | 正式 |
| 002 | 李四 | 运营部 | 4500 | 兼职 |
| 003 | 王五 | 研发部 | 6200 | 正式 |
| 004 | 赵六 | 客服部 | 5000 | 正式 |
| 005 | 钱七 | 销售部 | 3800 | 兼职 |
【执行提示词】
“工资表” :删除工资小于 5000 的行。
【处理后:工资表(就地更新)】
| 工号 | 姓名 | 部门 | 工资 | 状态 | 变更说明 |
|---|---|---|---|---|---|
| 001 | 张三 | 研发部 | 8000 | 正式 | 正常保留 |
| 003 | 王五 | 研发部 | 6200 | 正式 | 正常保留 |
| 004 | 赵六 | 客服部 | 5000 | 正式 | 边界值精准保留(5000 不小于 5000) |
逻辑详解:李四(4500)与钱七(3800)被安全剔除,全表行数从 5 行减少至 3 行;原表的列结构、未提及字段保持完整无误。
场景 2:智能按键去重(复合键去重与极值保留)
案例 A:多列复合键去重(只留首条)
业务背景:门禁系统网络抖动导致同一员工在短时间内被多次记录打卡,分析师需要按“工号 + 日期”去重,仅保留当天首次打卡记录。
【处理前:打卡表】
| 工号 | 姓名 | 打卡日期 | 打卡时间 | 门禁点 |
|---|---|---|---|---|
| 001 | 张三 | 2025-01-02 | 08:55:10 | 正门 |
| 001 | 张三 | 2025-01-02 | 08:55:12 | 正门 |
| 002 | 李四 | 2025-01-02 | 08:58:30 | 侧门 |
| 002 | 李四 | 2025-01-02 | 09:05:15 | 正门 |
| 001 | 张三 | 2025-01-03 | 08:50:00 | 正门 |
【执行提示词】
“打卡表” :按 “工号” 和 “打卡日期” 去重,重复行只留第一条。
【处理后:打卡表(就地更新)】
| 工号 | 姓名 | 打卡日期 | 打卡时间 | 门禁点 | 变更说明 |
|---|---|---|---|---|---|
| 001 | 张三 | 2025-01-02 | 08:55:10 | 正门 | 保留首次打卡,剔除 08:55:12 的抖动行 |
| 002 | 李四 | 2025-01-02 | 08:58:30 | 侧门 | 保留当天首条,剔除后续打卡 |
| 001 | 张三 | 2025-01-03 | 08:50:00 | 正门 | 属于不同打卡日期,正常保留 |
案例 B:按指定列极值去重(取生效日期最新的一条)
业务背景:商品价目表存在历史调价记录,同一 SKU 出现多次,核算当前成本时需要每个 SKU 仅保留“生效日期最新”的那一行。
【处理前:价目表】
| SKU | 商品名称 | 生效日期 | 供货价 | 备注 |
|---|---|---|---|---|
| A01 | 陶瓷水杯 | 2024-01-01 | 10.00 | 初次定版 |
| A01 | 陶瓷水杯 | 2024-06-01 | 15.00 | 年中提价 |
| A02 | 纯棉毛巾 | 2024-01-01 | 20.00 | 长期稳定 |
【执行提示词】
“价目表” :按 SKU 去重,重复时留生效日期最大的那一条。
【处理后:价目表(就地更新)】
| SKU | 商品名称 | 生效日期 | 供货价 | 备注 | 变更说明 |
|---|---|---|---|---|---|
| A01 | 陶瓷水杯 | 2024-06-01 | 15.00 | 年中提价 | 自动选中 2024-06-01 极大值行,旧价被剔除 |
| A02 | 纯棉毛巾 | 2024-01-01 | 20.00 | 长期稳定 | 唯一记录正常保留 |
场景 3:数据行序重组(单列与多字段组合排序)
业务背景:电商分析师导出每日订单明细,需要按销售金额由高到低排列以重点关注大单客户;若金额相同,则按下单时间升序排列。
【处理前:订单明细表】
| 订单号 | 客户名称 | 下单时间 | 成交金额 | 渠道 |
|---|---|---|---|---|
| O01 | 华为技术 | 10:15:00 | 5600 | 线下签约 |
| O02 | 腾讯科技 | 09:30:00 | 12000 | 线上商城 |
| O03 | 字节跳动 | 14:20:00 | 5600 | 线下签约 |
| O04 | 个人买家 | 11:00:00 | 380 | 淘系店铺 |
【执行提示词】
“订单明细表” :先按成交金额从大到小排序;成交金额相同的,按下单时间从小到大排序。
【处理后:订单明细表(就地更新)】
| 订单号 | 客户名称 | 下单时间 | 成交金额 | 渠道 | 排列依据 |
|---|---|---|---|---|---|
| O02 | 腾讯科技 | 09:30:00 | 12000 | 线上商城 | 第一名:金额最高(12000) |
| O01 | 华为技术 | 10:15:00 | 5600 | 线下签约 | 第二名:金额并列 5600,时间较早(10:15)排前 |
| O03 | 字节跳动 | 14:20:00 | 5600 | 线下签约 | 第三名:金额并列 5600,时间较晚(14:20)排后 |
| O04 | 个人买家 | 11:00:00 | 380 | 淘系店铺 | 第四名:金额最小(380) |
注意:排序操作保留表格所有原始行,仅改变物理存储的展示顺序,不会产生多余的“名次”列(若需要生成名次列,请使用「明细排名」算子)。
场景 4:多步操作组合拳(删行 → 排序复合治理)
业务背景:导入原始对账单后,需一次性完成脏数据清洗与规范化排列:先剔除退款负数行与 0 元赠品单,再对有效订单按金额降序排布。
【处理前:对账订单表】
| 订单号 | 交易类型 | 金额 | 状态 |
|---|---|---|---|
| O1 | 正常销售 | 120 | 已支付 |
| O2 | 售后退款 | -8 | 已退款 |
| O3 | 促销赠送 | 0 | 已完成 |
| O4 | 正常销售 | 56 | 已支付 |
【执行提示词】
“对账订单表” :
1. 删除金额小于等于 0 的行
2. 按金额从大到小排序
【处理后:对账订单表(就地更新)】
| 订单号 | 交易类型 | 金额 | 状态 | 流水线执行过程 |
|---|---|---|---|---|
| O1 | 正常销售 | 120 | 已支付 | 步骤 1 保留 → 步骤 2 排序位居首位 |
| O4 | 正常销售 | 56 | 已支付 | 步骤 1 保留 → 步骤 2 排序紧随其后 |
关键机制:第 2 步排序自动基于第 1 步已经清洗后的纯净数据执行,避免了无效数据参与排序造成的算力浪费与混淆。
场景 5:跨多表批量范围统一规整
业务背景:按大区拆分的多个财务对账底稿(如 对账_华东、对账_华北、对账_华南)均混入了金额为负的冲销流水,分析师需要一行指令批量清理所有对账表。
【执行提示词】
以 “对账_” 开头的表:删除金额小于 0 的行。
【执行效果】
- 对账_华东.xlsx:内部所有金额小于 0 的记录被自动清除;
- 对账_华北.xlsx:内部所有金额小于 0 的记录被自动清除;
- 对账_华南.xlsx:内部所有金额小于 0 的记录被自动清除;
- 客户总表.xlsx、商品主数据.xlsx:名称不匹配前缀规则,完全保持只读,绝不误伤。
五、 常见问题与操作贴士(FAQ)
Q1:为什么执行「表操作」后,左侧工作空间没有生成新表?
答:这是「表操作」的核心设计机制。在大型数据流水线中,如果每一步简单删行或排序都生成一张新表,工作空间很快会被几十张重名副本(如
订单表_删行、订单表_排序)塞满,导致下游节点连线混乱。
「表操作」默认采用就地更新(In-Place)模式,直接在当前表的底层列存上刷新行集合。若您的业务确实需要保留原表并生成新表独立对比,请使用 「筛选器」 算子。
Q2:按条件删行时,会误删或修改列结构吗?
答:绝对不会。「表操作」严格遵循单表行级约束:
- 删行操作只会减少数据行数,所有列的名称、顺序、数据类型以及未命中删除条件的单元格数据均百分之百保持原样;
- 不会在表格末尾擅自新增计算列或状态标记列。
Q3:去重时的“保留第一条”和“保留最后一条”是如何判定的?
答:判定完全取决于数据当前在表中的物理存储顺序:
- “留第一条”:保留在表格上方最先出现的记录,剔除下方重复项;
- “留最后一条”:保留在表格下方最后出现的记录,剔除上方旧项;
- 若需要基于业务时间判定(例如保留真正的“最新一次”),强烈建议在提示词中显式指定排重依据:按 SKU 去重,重复时留生效日期最大的那一条。
Q4:在提示词中写了多步操作,它们是并行执行还是串行执行?
答:严格串行流水线执行。系统会将编号分行的多步指令(如 1. 删行 2. 排序)编译为确定性执行计划。后一步的操作永远基于前一步已经修改完成的数据进行运算,确保与人类分析师的操作直觉完全一致。
六、 关联算子导航
- 若需将清洗后的行数据另存为独立新表进行专题分析:请参考 数据处理 · 筛选器
- 若需对单元格内部的字符串进行去空格、改错字、正则清洗:请参考 数据处理 · 行操作
- 若需修改表头列名、删除整列、重排展示列顺序:请参考 数据处理 · 表头整理
- 若需基于排完序的明细生成连续或并列的名次序列:请参考 数据统计 · 明细排名
- 欲下载真实数据表格亲自动手实测:请查阅 数据案例 · 表操作案例