在合并单元格导出、横向补录与数量缺测场景中,分析师面对的空格往往不是「这一行不该存在」,而是「值被落在邻近单元格」:地区只在分组首行有值、下面是空;同行左侧有编码、右侧空着;数量列偶发空单元格,无法分组或求和。

如果采用传统手工方式,只能下拉填充、逐格粘贴或写一列公式再覆盖,已有非空值容易被误改;把「填成 0」和「用均值填」混用,还会把类别列写成无法解释的数字。空 = NULL、空串、空白,口径稍不一致,复跑结果就会分叉。

DT-Bot 的 「缺失填充」 算子专为解决此类只补指定列空单元格、行数不变的问题而设计。它对齐常见的 fillna:沿轴传播(向下 / 向上 / 向左 / 向右)、写成常数、用均值 / 中位数 / 众数。默认就地改源表;写了结果名则写新表。不增列、不改列名。未说方向时默认纵向向下。

一、 核心能力与适用场景

「缺失填充」算子聚焦于空单元格补值、行集合不变,覆盖以下五大核心能力:

核心能力 解决什么业务问题 典型业务场景
向下填充 用上面最近一次非空值往下传播,已有非空值不动。 合并单元格导出后,地区只在首行有值、下面是空,用上面最近非空往下填。
向上填充 用下面最近一次非空值往上传播。 分组标记写在块末行,需要把地区从下往上补到空行。
横向传播(从左往右 / 向左) 同行用邻近列非空把空格补上。 横向表从左往右把空的填上。
常数填充 把指定列的空单元格写成某个字、0 或明确的空。 数量空的填成 0。要写入的字(含 null)按原样写入。
统计量填充(均值 / 中位数 / 众数) 用该列非空值的均值、中位数或出现最多的值填空。 数量列空的,用该列平均值填上。均值、中位数只填数值列。

二、 边界指南:它与相近算子有何区别?

在构建数据工作流时,理解算子之间的职责边界至关重要:

比较维度 「缺失填充」算子 「匹配填充」算子 「行操作」算子
主要定位 在本表内把空单元格补上,行数不变 按键从另一张表补列 空则用同行其它列算出来
输出机制 默认就地;写了结果名则写新表 就地或贴列,键对齐 就地更新单元格
典型动作 向下 / 向上 / 向左 / 向右、常数、均值 / 中位数 / 众数 VLOOKUP 式按工号、SKU 取值 空则用单价 × 数量等公式写入
如何选择 “地区空的,用上面最近非空往下填” “按商品编码从价目表把供货价填回来” “金额空则用单价 × 数量算出来”

注意:把已有的 0 改成空,不是本节点。不增列、不改列名。

三、 提示词编写规范与公式

「缺失填充」算子支持自然语言直接表达,建议遵循以下标准的三要素编写公式:

【目标表】 + 【列与方法】 + 【结果名(可选)】

1. 目标表表达

  • 单表精准点名:明确填哪一张表,例如 把 “地区明细” 的地区列空的,用上面最近一次非空往下填;
  • 默认当前流转表:若提示词中未显式提及表名,算子将默认继承上一节点连线流入的数据表。

2. 列与方法表达

  • 点名列:填哪一列或哪几列;可一次点名多列一起向下填;
  • 方向:向下 / 向上 / 向左 / 向右;未说方向时默认纵向向下;
  • 常数:填成某个字、0;要写入的字(含 null)按原样写入,不要理解成「填成空」;
  • 明确填空:只有明确说填成空 / 空串,才写成空;
  • 统计量:用该列平均值、中位数、众数。均值、中位数只填数值列;众数按出现最多的非空值。

3. 空值口径与结果名

  • 空 = NULL、空串、空白,这三类都会被填;
  • 已有非空值不动,包括已经写着的 0;
  • 不写结果名:就地改源表;写了结果名则写新表。

示例:

把 “地区明细” 的地区列空的,用上面最近一次非空往下填。

对应三段:

  1. 表:地区明细
  2. 列:地区;方法:向下填充
  3. 结果:就地改源表

四、 核心功能与图解实战

以下结合真实企业数据场景,展示「缺失填充」在不同需求下的处理效果:

场景 1:向下填充(合并单元格导出后的地区)

业务背景:地区列由合并单元格导出,只在每个地区的首行有值,下面是空。后续按地区分组前,必须用上面最近一次非空往下填;华北那行本来有值,不能被改写。

【处理前:地区明细】

地区 品类 金额
华东 饮料 10
(空) 零食 20
(空) 饮料 15
华北 零食 8

【执行提示词】

把 “地区明细” 的地区列空的,用上面最近一次非空往下填。

【处理后:地区明细(就地更新)】

地区 品类 金额 变更说明
华东 饮料 10 本来有值,不动
华东 零食 20 用上面最近非空「华东」填上
华东 饮料 15 用上面最近非空「华东」填上
华北 零食 8 本来有值,不动

逻辑详解:空的两行都变成华东。华北那行本来有值,不动。品类、金额未点名,保持原样。行数仍是 4 行。未说方向时,本能力也是默认的纵向向下。


场景 2:向上填充(块末标记往上补)

业务背景:同一张地区明细里,若标记写在块的下方,需要用下面最近非空往上填;已有「华东」「华北」的行仍然不动。

【处理前:地区明细】

地区 品类 金额
华东 饮料 10
(空) 零食 20
(空) 饮料 15
华北 零食 8

【执行提示词】

把地区明细的地区列,用下面最近非空往上填。

【处理后:地区明细(就地更新)】

地区 品类 金额 变更说明
华东 饮料 10 本来有值,不动
华北 零食 20 下面最近非空是「华北」
华北 饮料 15 下面最近非空是「华北」
华北 零食 8 本来有值,不动

逻辑详解:方向与场景 1 相反:空行寻找下方最近非空。行数不变,未点名列不动。


场景 3:从左往右把同行空格补上

业务背景:横向表同一行里,左侧已有姓名或部门,右侧岗位等格子为空。需要按行从左往右传播,而不是按键去另一张表取值。

【处理前:横向表】

姓名 部门 岗位
张三 (空) (空)
李四 人事 (空)

【执行提示词】

把 “横向表” 从左往右把空的填上。

【处理后:横向表(就地更新)】

姓名 部门 岗位 变更说明
张三 张三 张三 空格依次吃到左侧最近非空「张三」
李四 人事 人事 岗位空,吃到左侧非空「人事」

逻辑详解:按行从左往右补空,不是按键从他表补。同一能力也支持向左传播。行数不变。若空则要用单价 × 数量算出来,请用「行操作」,不是本节点。


场景 4:常数填充(数量空的填成 0)

业务背景:数量列偶发空单元格,汇总时不能把空当成「没有这一行」。业务约定空数量按 0 参与合计;已经写成数字的行不得改动。

【处理前:数量表】

商品 数量
水杯 10
毛巾 (空)
杯子 5

【执行提示词】

把 “数量表” 数量列空的填成 0。

【处理后:数量表(就地更新)】

商品 数量 变更说明
水杯 10 本来有值,不动
毛巾 0 空单元格写成常数 0
杯子 5 本来有值,不动

逻辑详解:只填空,不把已有的 5 改成 0。要写入的字(含 null)按原样写入,不要理解成「填成空」。只有明确说填成空 / 空串,才写成空。把已有的 0 改成空,不是本节点。


场景 5:用该列平均值填空(统计量)

业务背景:数量缺测时,业务要求用该列已有数值的平均值补空,而不是填 0,以免把缺测和真实零销售混在一起。

【处理前:数量表】

商品 数量
水杯 10
毛巾 (空)
杯子 20

【执行提示词】

把数量表数量列空的,用该列平均值填上。

【处理后:数量表(就地更新)】

商品 数量 变更说明
水杯 10 参与均值计算,本身不动
毛巾 15 (10 + 20) / 2 = 15,写入空格
杯子 20 参与均值计算,本身不动

逻辑详解:均值、中位数只填数值列。众数按出现最多的非空值。中位数、众数与均值同一机制,只是聚合量不同。可一次点名多列一起向下填。行数不变,不增列、不改列名。

五、 常见问题与操作贴士(FAQ)

Q1:为什么执行后没有新表,行数也没变?

答:这是默认机制。未写结果名时,本节点就地改源表,只改空单元格,行数不变。若需要保留未填充的底表,请在提示词里写出结果名。

Q2:NULL、空串、空白,以及已经写成 0 的格子,分别怎么处理?

答:空 = NULL、空串、空白,这三类都会被填。已经写成 0 的格子是非空值,不会被向下填充或均值覆盖。把已有的 0 改成空,不是本节点。

Q3:提示词里写了要填入「null」,会不会理解成填成空?

答:不会。要写入的字(含 null)按原样写入。只有明确说填成空 / 空串,才写成空。

Q4:按键从另一张表补列,或空则用公式算出来,该用谁?

答:按键从另一张表补列请用「匹配填充」。空则用同行其它列算出来(例如空则用单价 × 数量)请用「行操作」。本节点不增列、不改列名,也不按键跨表取值。

六、 关联算子导航