在数据清洗与预处理链路中,分析师从业务系统导出的原始数据往往存在大量“脏数据”:测试账号生成的废弃单、退款冲红导致的负金额流水、重复推送产生的多版本打卡记录,以及混乱无序的导出排列。

如果采用传统手工方式,不仅需要在各个字段上反复设置复杂筛选、手动删除行、按键排重,而且极易误删正常业务数据,且无法形成可回溯、可自动复跑的工作流。

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. 排序)编译为确定性执行计划。后一步的操作永远基于前一步已经修改完成的数据进行运算,确保与人类分析师的操作直觉完全一致。

六、 关联算子导航