前几天有个朋友问了这样一个问题,是关于数据清洗与转化的。


如下图所示,是原有的数据结构,是非常地不合理与规范的数据结构:


excel的power query使用(数据清洗与整理)(1)


需要将上面的数据整理成如下图所示的规范的数据:


excel的power query使用(数据清洗与整理)(2)


对于上面的这个问题,处理的首先的方法考虑Power Qeury或者VBA的方法,那么本节案例中将采用的是Excel中自带的数据清洗功能Power Qeury.


主要思路:先添加一个自定列为当前行,再将record转化成Table,然后两两拆分后进行合并,转化成Record结构后再展开即可。


具体的操作步骤如下:


Step-01:先将原始数据加载至Power Query中,如图所示:


excel的power query使用(数据清洗与整理)(3)


Step-02:在Excel Power Query编辑器中使用Table.AddColumn添加一个自定义列,引用到当前的行再转换成表,再使用Table.ColumnNames获取数据源中的标题行,然后使用List.FirstN获取前6行即可。


excel的power query使用(数据清洗与整理)(4)


Step-03:接着面的步骤,将上面的自定义中的每一个table里面的表降标题处理。如下图所示:


excel的power query使用(数据清洗与整理)(5)


再将每一列转化成一个List,可以使用Table.ToRecord函数如下图所示:


excel的power query使用(数据清洗与整理)(6)


Step-04:使用List.Split函数将每两个List拆分为一个List,如下图所示:


excel的power query使用(数据清洗与整理)(7)


使用List.Transfrom函数与List.Combine函数将每个List中的两个List的内容进行合并,如图所示:


excel的power query使用(数据清洗与整理)(8)


Step-05:最后再次使用List.Transform函数来构造Record结构用于展开。


excel的power query使用(数据清洗与整理)(9)


Step-06:最后层层展开,删除没用的列即可。如图所示:


excel的power query使用(数据清洗与整理)(10)


最终的代码如下图所示:


excel的power query使用(数据清洗与整理)(11)


当然还可以使用Table.Group函数进行清理,具体代码如下图所示:


excel的power query使用(数据清洗与整理)(12)

,