打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【源数据才是大麻烦】又一个清洗不规范源数据的例子

正是那些不规范的源数据,才造成了我们需要经常加班加点。掌握这些数据清洗方法并灵活运用是必须的!

阅读本文时,跟着操作案例文件效果更好。案例文件获取方式见文末。


01

数据和要求

数据很简单:

我们有4个季度的数据,每个季度3列。为了后续分析,我们需要将这份数据整理成下面的规范的形式:


02

实现方法

就案例中展示的数据来说,要得到结果表很简单。只需要两步:

  1. 选择Q2,Q3,Q4的数据分别复制到Q1数据下方

  2. 添加一列,每九行分别填写Q1,Q2,Q3,Q4

全部操作可以在2分钟之内轻松完成。

但是这个操作只适合偶尔操作和少量的数据。如果数据量比较大,或每天都要做类似的工作,这种手工操作效率太低,也不能建立自动化的数据处理过程。所以,我们还是需要这个最强大的数据处理工具:Power Query。

首先,选中源数据区域的任意单元格,点击数据选项卡中的“从表格”:

数据导入到Power Query编辑器中(会首先弹出对话框,将数据区域转换为超级表):

在转换选项卡中,点击转置:

将表格转置:

选中左边第一列“Column1”,在转换选项卡中,选择向下填充:

完成填充后,在转换选项卡中,点击分组依据,对表格按照季度分组:

在对话框中,将分组列选择为Column1,将新列名修改为“分组”,操作选择“所有行”:

点击确定,数据分为了四组:

删除第一列“Column1”:

在转换选项卡中,点击“转换为列表”:

数据转换为列表后,多了一个选项卡“列表工具-转换”:

点击其中最左边的按钮“到表”,将数据转换为Table,在出现的对话框中做如下选择:

得到结果:

在添加列选项卡中,点击自定义列:

在对话框中,输入公式:

=Table.AddColumn(#"转换为表", "Custom", (OT)=> Table.AddColumn( Table.Transpose(Table.RemoveColumns(OT[Column1],{"Column1"})),"季度", (IT)=> OT[Column1][Column1]{0}))

如下图:

点击确定后,插入新列:

删除左边第一列“Column1”,

点击“自定义”列标题右侧的展开按钮,点击确定:

得到结果:

删除左边第一列:

点击列Custom标题右侧的展开按钮,点击确定:

得到结果:

修改列名:

点击主页选项卡中的关闭并上载:

得到结果:

大功告成!

总结

在这个案例中,我们使用了跟以前介绍过的不一样的方法。主要的区别是使用的表(Table)和列表(List)的转换。另外,大部分功能都是通过菜单按钮完成的,只有一步进行表格转置时使用的手工输入的函数。

其实,即使菜单功能,也是使用各种函数完成的。关于Power Query的这些函数和使用,我们在Power Query中级课程中会详细介绍!

这里,我们将本案例的代码附在下面,供大家参考:

let 源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content], 转置表 = Table.Transpose(源), 向下填充 = Table.FillDown(转置表,{"Column1"}), 分组的行 = Table.Group(向下填充, {"Column1"}, {{"分组", each _, type table [Column1=text, Column2=any, Column3=any, Column4=any, Column5=any, Column6=any, Column7=any, Column8=any, Column9=any, Column10=any]}}), 删除的列 = Table.RemoveColumns(分组的行,{"Column1"}), 分组 = 删除的列[分组], 转换为表 = Table.FromList(分组, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 已添加自定义 = Table.AddColumn(转换为表, "自定义", each Table.AddColumn(#"转换为表", "Custom", (OT)=> Table.AddColumn( Table.Transpose(Table.RemoveColumns(OT[Column1],{"Column1"})),"季度", (IT)=> OT[Column1][Column1]{0}))), 删除的列1 = Table.RemoveColumns(已添加自定义,{"Column1"}), #"展开的“自定义”" = Table.ExpandTableColumn(删除的列1, "自定义", {"Column1", "Custom"}, {"Column1", "Custom"}), 删除的列2 = Table.RemoveColumns(#"展开的“自定义”",{"Column1"}), #"展开的“Custom”" = Table.ExpandTableColumn(删除的列2, "Custom", {"Column1", "Column2", "Column3", "季度"}, {"Column1", "Column2", "Column3", "季度"}), 重命名的列 = Table.RenameColumns(#"展开的“Custom”",{{"Column1", "类别"}, {"Column2", "产品"}, {"Column3", "数量"}})in 重命名的列

加入E学会,学习更多Power Query数据处理方法

关注本公众号,点击底部菜单“联系客服”,与客服取得联系,索取“多列转置”案例文件

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
M语言中的操作符说明:函数与圆括号()
为什么你加班?因为你使用Excel不规范!就算不规范我也不加班!
elementUI中的el-table标签介绍
快速学习mysql,掌握以下知识点就OK了
[Apache Click快速开发]Click的多彩table组件
Excel格式化表单如何批量转换并汇总为规范的明细表?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服