数据转换:类型、日期、文本拆合
表读进来了,字段名也对了,但「数量」不能求和、「日期」没法排序、编号带着一堆前后缀。数据转换要解决的就是这些:让字段真正变成能算的东西。
这一讲接着第 3 讲往下做。默认你已经能把数据读进来、会用行过滤和列过滤,也知道执行完要回监控面板核对。
先认字段名左边那个小标记
数据转换的一切问题,几乎都能追到同一个地方:字段的类型不对。而类型就明明白白写在字段名左边。
| 标记 | 类型 | 意味着什么 |
|---|---|---|
| S字符串 | 文本 | 不能求和、不能求平均;排序按字符比,「10」会排在「9」前面 |
| I整数 | 数值 | 可以计算、可以正常排序、可以做分组统计 |
| D日期 | 日期 | 可以按月分组、可以算区间天数、可以正常排序 |
从 Excel 或 CSV 读进来的字段,绝大多数默认是字符串。哪怕里面全是数字。这不是软件的毛病,是它不敢替你猜。
一、类型转换:看着是数字,其实是文本
演示会自动播放。鼠标移上去暂停,点任意按钮转为手动,点右上角可以全屏投影。
转换本身很简单,难的是转换会失败。含千分位逗号的「1,240」、带单位的「12 台」、前后有空格的「 9 」,这些都转不成数字。
转换失败默认不报错。节点会把失败的行置为缺失值,然后继续,灯还是绿的。所以每次转完类型都要回监控面板看一眼:缺失值有几个。这个数不是 0,就说明有行没转成。
记住这个顺序:先用字符串处理把文本清干净,再转类型。倒过来做,你会一直在跟失败行较劲。
二、日期:格式串描述的是源数据
「2026年8月31日」在你眼里是日期,在系统里只是一串字符。不转成日期类型,就没法按月分组、没法算区间天数、排序也是按文本排的。
格式串怎么写
这是整个节点唯一的难点,而且几乎所有人第一次都会写错。原因是方向搞反了:格式串描述的是源数据长什么样,不是你想要的结果长什么样。
| 源数据 | 格式串 | 说明 |
|---|---|---|
| 2026-08-31 | yyyy-MM-dd | 最标准的写法 |
| 2026年8月31日 | yyyy年M月d日 | 汉字要原样写进去;是 M 不是 MM |
| 20260831 | yyyyMMdd | 没有分隔符,位数必须写死 |
| 2026/8/31 14:30 | yyyy/M/d H:mm | 带时间就要选「日期与时间」类型 |
字母个数就是位数:MM 匹配 08,M 匹配 8。源数据里是「8月」而不是「08月」,就得用 M。
调试期把「转换失败时」改成让节点失败
这个参数默认是「置为缺失值并继续」。好处是流程不中断,坏处是错误被藏起来了 – 一列日期转失败一半,节点照样绿灯。
建议的做法是两套设置:调试时让它失败,你能第一时间看到哪几行转不了;调完改回缺失值,让流程以后能自动跑完。
三、文本拆合:把信息拆开或拼起来
编号带前后缀、部门信息挤在一个格子里、需要拼一个唯一标识 – 这三件事对应三个节点。
substr,位置不固定用 regexReplace。正则写不出来是正常的。把字段样例和你要的结果描述给 AI,让它给你一段正则,回来粘贴进去再用预览验证。这是正常用法,不必回避。
四、规则引擎:按条件生成新列
「六十万以上算重大,三十万以上算一般,其余算零星」 – 这种按条件贴标签的活,用规则引擎。写法是一行一条 条件 => 结果,从上往下匹配,命中就停。
规则引擎和行过滤器最容易被搞混。行过滤是减少行,规则引擎是新增一个判断结果的列。四行进去还是四行出来,只是多了一列。这一句记住,两个节点就不会再用错。
还有一条容易漏:最后那条兜底规则不能省。没有它,所有不满足前面条件的行会得到缺失值,而缺失值不报错。你可能要到很后面才发现有一批资产根本没分级。
学完自检
- 会看字段名左边的类型标记,知道 S 的数值列不能直接算
- 知道类型转换失败不报错,转完会去核对缺失值数量
- 会写日期格式串,并且清楚它描述的是源数据不是结果
- 能剥掉编号的前后缀,能把一列拆成多列
- 分得清规则引擎(加一列)和行过滤器(减行),知道兜底规则不能省

