举例
例1:列转行
有 Excel 文件 csv.csv,数据如下所示:
| C1 | C2 | C3 | ||||||
| Meat | oil | Vegetable | Meat | Vegetable | oil | Meat | oil | Vegetable |
| 8 | 6 | 4 | 18 | 62 | 24 | 11 | 12 | 13 |
csv 文件里 N 条横向摆放的数据,第1行是每个数据的国家字段的值,第2行是每个数据的其他列名,第3行是每列对应的数值。现在要将该文件整理成规范的行式数据,结果如下:
| country | Meat | Vegetable | oil |
| C1 | 8 | 4 | 6 |
| C2 | 18 | 62 | 24 |
| C3 | 11 | 13 | 12 |
编写 SPL 脚本:
| A | |
| 1 | =file("csv.csv").read() |
| 2 | =A1.split@n(",") |
| 3 | =transpose(A2).run(if(~(1)=="",~(1)=~[-1](1))) |
| 4 | =create(country,cate,value) |
| 5 | >A3.(A4.record(~)) |
| 6 | =A4.pivot(country;cate,value) |
| 7 | =file("result.csv").export@ct(A6) |
A1 把 csv 的数据读成串
A2 把串拆成序列的序列
A3 转置序列的序列,把第一列国家补完整
A4 建空序表 (country,cate,value)
A5 将 A3 的数据依次填入序表
A6 用 pivot 函数行转列
A7 结果导出到 result.csv
例2:行转列
有 Excel 文件 csv.csv,数据如下所示:
| country | Meat | Vegetable | oil |
| C1 | 8 | 4 | 6 |
| C2 | 18 | 62 | 24 |
| C3 | 11 | 13 | 12 |
首行是列名,分别是国家和其他信息列。现在要将该文件整理成如下形式:
| C1 | C2 | C3 | ||||||
| Meat | Vegetable | oil | Meat | Vegetable | oil | Meat | Vegetable | oil |
| 8 | 4 | 6 | 18 | 62 | 24 | 11 | 13 | 12 |
编写 SPL 脚本:
| A | |
| 1 | =file("csv.csv").import@ct() |
| 2 | =A1.pivot@r(country;cate,value;Meat,Vegetable,oil) |
| 3 | =A2.group(country).(~.run(country=if(#==1,country,""))).conj() |
| 4 | =transpose(A3.(#1|#2|#3)).concat@nc() |
| 5 | =file("result.csv").write(A4) |
A1 读取 csv 数据
A2 列转行操作,将列名Meat,Vegetable,oil作为 cate 的值,原Meat,Vegetable,oil列对应的数值作为 value 列的数据
A3 按国家分组,每组非首行国家数值为空,合并
A4 合并各列,变为序列的序列,对序列的序列转置后按逗号、回车符转成串
A5 A4的结果串写入 result.csv
这篇博客通过两个示例详细介绍了如何使用SPL脚本进行行列转换。例1展示了如何将Excel中列转行,涉及读取csv文件、转置序列和使用pivot函数;例2则解释了行转列的过程,包括按国家分组和序列转置。最终,转换结果导出到新的csv文件中。
686

被折叠的 条评论
为什么被折叠?



