它解决什么问题
缺失值不只是难看。它会让求和求平均的口径变模糊、让 Row Filter 的条件匹配不上、让 Joiner 关联失败。这个节点把整张表的空值一次性按规则处理掉。
先搞清楚为什么空,再决定怎么填。「这台设备本来就没有采购价」和「这一格漏填了」是两回事,前者该保留为空并在口径里说明,后者才该补。一律填 0 或填均值是最省事也最容易出错的做法 – 它把「不知道」变成了一个看起来确定的数字。
它在流程里的位置
要放在筛选和汇总之前。空值会让 Row Filter 的条件匹配不上、让求平均的分母变成有值的行数,先处理掉口径才清楚。
基本信息
| 英文原名 | Missing Value |
|---|---|
| 中文名称 | 缺失值处理(iModel 中文界面) |
| 节点库位置 | Manipulation → Column → Transform |
| 输入端口 | 1 个数据表 |
| 输出端口 | 1 个 |
| 是否改变行数 | 只有选了「删除整行」才会变 |
配置项逐条
-
按类型设默认Default 标签页
给数值列、文本列、日期列各设一个通用处理方式。列很多且规则一致时省事。
-
按列单独设Column Settings 标签页
把需要特殊对待的列单独加进来,覆盖上面的默认值。实际项目里基本都要用到这一页 – 金额列和状态列的填法不可能一样。
-
Remove row删除整行
这一列为空就整行不要。注意它删的是整行,不只是这一格 – 其他列的有效数据会一起没。行数会变,用完对一下。
-
Fix value填固定值
填 0、填「未知」、填某个默认编码。最可控的一种,也最容易被滥用。金额列填 0 意味着你在断言这笔钱是零,而不是不知道。
-
Mean / Median / Most frequent均值 / 中位数 / 众数
用这一列已有值的统计量来补。做建模的常规手段,做财务和稽核报表要慎用 – 你等于凭空造了数据,出报表时必须在口径里说明。有极端值时中位数比均值稳。
-
Previous / Next value取上一个 / 下一个非空值
用相邻行的值填。处理 Excel 合并单元格的标准解法 – 合并单元格读进来只有第一行有值,用「取上一个非空值」正好补齐。
前提是行序必须正确。这种填法完全依赖当前行的顺序,用之前先确认没被排序打乱。
Missing Value 配置对话框 · 按类型设默认
数值列Number
不处理删除整行填固定值均值中位数
文本列String
不处理填固定值众数取上一个非空值
按列单独设Column Settings 标签页
把需要特殊对待的列加进来,覆盖上面的默认
实际项目里基本都要用到这一页。金额列和状态列的填法不可能一样 – 前者填 0 是在断言这笔钱是零,后者填「未知」通常没问题。
三个常见坑
- 空字符串不是缺失值。单元格里是一个空格或者长度为零的文本,KNIME 认为它有值,这个节点不会碰它。先用 String Manipulation 把这类值转成真正的空,再处理。这是「明明处理过了还是有空格子」的最常见原因。
- 用均值填完,后面的统计全变了。填进去的值会参与后续所有计算。标准差变小、分布变窄,如果这批数据要拿去做判断,结论可能被填法带偏。填之前先看这一列缺了多少 – 缺一两个和缺三成完全是两回事。
- 用「取上一个非空值」但没先排序。行序不对,补出来的值就是隔壁不相干记录的值,而且看不出来。这种错误特别隐蔽 – 配合 Sorter 一起用。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 只想知道哪些列缺了多少,先不处理 | 统计类节点,先体检再决定 |
| 填充规则依赖别的列,比如 A 空时取 B | Rule Engine 或 Column Expressions |
| 要从另一张对照表里取值来补 | Joiner 关联后再用 Rule Engine 择一 |
| 只是想把空值行挑出来单独看 | Row Filter,条件用「为空值」 |

