Power Query 数据清洗实战:从行列增删到智能填充与替换

张开发
2026/4/20 23:36:34 15 分钟阅读
Power Query 数据清洗实战:从行列增删到智能填充与替换
1. Power Query数据清洗入门为什么行列操作是第一步刚接触Power Query时我最常犯的错误就是直接对数据动手动脚结果越改越乱。后来才发现数据清洗就像装修房子得先拆墙删除无用行列再粉刷填充替换。拿销售数据来说原始表格往往带着合并单元格、空行、测试数据这些装修废料不清理干净后续分析全完蛋。去年我处理过一份连锁超市的销售报表第一眼看上去就头大前3行是公司Logo第5行开始才是有效数据中间还夹着两行合计值。这时候删除行功能就是救星先用删除最前面几行干掉Logo接着用删除间隔行精准清除合计行最后用删除空行扫尾关键逻辑在于先做减法再做加法。就像下面这个GDP数据处理案例// 删除前两行非数据内容 Table.RemoveRows(Source,0,2) // 提升第三行为标题 Table.PromoteHeaders(#Removed Top Rows)有次我偷懒跳过了删除空行步骤结果做数据透视时系统把空值也计算进去导致月销售额平白多出几十万幽灵数据。血泪教训告诉我们数据清洗阶段省1分钟分析阶段可能要多花1小时纠错。2. 行列操作的进阶技巧比删除更重要的是筛选很多人以为删除行就是简单划掉几行数据其实这里面门道不少。上周帮客户整理会员信息表时就遇到典型场景表格有10万行需要保留2023年的交易记录但年份数据分散在3个不同列里。这时候筛选删除组合拳比单纯删除更高效先用删除最前面几行清理文件说明然后对日期列使用删除空行最后用筛选器保留符合条件的数据// 多条件筛选的M公式示例 Table.SelectRows( #Previous Step, each [OrderDate] #date(2023,1,1) and [OrderDate] #date(2023,12,31) )特别提醒删除重复项功能有个隐藏坑。有次我处理客户订单时直接删重复项结果把同一客户不同日期的订单也合并了。正确做法是先按客户ID和日期降序排列再删除重复项这样才能保留最新记录。这个细节让我的报表准确率直接提升40%。3. 智能填充拯救合并单元格的终极方案财务同事最爱的合并单元格简直是数据分析的噩梦。上个月接手市场部的活动预算表所有部门名称都只合并显示在第一行下面全是null值。这时候向下填充就是救命稻草选中部门列点击转换→填充→向下瞬间所有null值被自动填充 Table.FillDown(#Previous Step,{Department})但更智能的做法是配合填充范围使用。比如处理分地区的销售数据时可以先按大区排序再使用分组填充。最近做零售分析时我用这个技巧处理了200多家门店的库存数据原本需要手动处理2小时的工作3分钟就搞定了。实测发现个冷知识填充功能对日期序列特别敏感。有次填充季度数据时系统自动识别出Q1、Q2的模式连2023-Q4这样的格式都能智能延续。不过遇到不规则数据时建议先排序再填充避免出现错位。4. 替换值的黑科技正则表达式与条件替换普通替换大家都会但Power Query的替换功能其实藏着大招。去年优化物流数据时我发现运单编号里有三种分隔符-, /, _。普通替换要操作三次而用高级替换一次搞定 Table.ReplaceValue( #Previous Step, each [TrackingNumber], each Text.Replace(Text.Replace(Text.Replace(_,-,/),_,/),.,/), Replacer.ReplaceText, {TrackingNumber} )更厉害的是条件替换功能。处理产品价格表时可以用它实现智能替换将库存小于10的显示为需补货把价格高于均值的标记为高单价自动标准化不同分公司的编码格式 Table.ReplaceValue( #Previous Step, each [Inventory], each if [Inventory] 10 then 需补货 else Text.From([Inventory]), Replacer.ReplaceValue, {Inventory} )最近还发现个神技巧替换值对话框里可以用通配符。比如把所有以TMP开头的临时编号批量替换为正式编号这个功能在处理系统导出的临时数据时特别管用。5. 实战案例从混乱数据到标准表格的全流程去年双十一后处理过一份典型的多灾多难数据前5行是活动说明商品分类是合并单元格价格包含¥符号日期有2023/11/11和2023-11-11两种格式完整清洗流程如下删除行阶段删除前5行说明删除测试订单金额为0的记录删除没有用户ID的异常记录填充阶段向下填充商品分类向上填充区域经理姓名替换阶段统一日期分隔符清除价格中的货币符号将缺货替换为0库存// 完整M代码示例 let Source Excel.CurrentWorkbook(){[NameSalesData]}[Content], RemoveTopRows Table.RemoveRows(Source,0,5), RemoveZeroSales Table.SelectRows(RemoveTopRows, each [Amount] 0), FillDownCategory Table.FillDown(RemoveZeroSales,{Category}), CleanPrice Table.ReplaceValue(FillDownCategory,¥,,Replacer.ReplaceText,{Price}), StandardizeDate Table.ReplaceValue(CleanPrice,-,/,Replacer.ReplaceText,{OrderDate}) in StandardizeDate这个案例最值得分享的经验是操作顺序决定效率。如果先做替换再删除行很多替换操作就白做了如果先填充再删除空行可能把需要保留的数据也误删了。经过多次踩坑我现在固定按照删除→填充→替换的流程操作效率至少提升3倍。6. 避坑指南数据清洗中的常见雷区在给20多家企业做过数据清洗后我整理出这些高频踩坑点删除行常见错误忘记先取消合并单元格就直接删除行导致关联数据丢失删除空行时没检查所有关键列造成有效记录被误删删除重复项前未排序保留的不是最新/最大记录填充操作陷阱对已分组的数据使用向下填充打乱原有分组结构填充数值型数据时系统自动转换格式导致精度丢失填充后没有检查边缘情况比如最后几行可能填充错误替换值暗坑替换文本时没勾选完全匹配把包含子串的值也替换了批量替换特殊符号时没考虑转义字符如%需要写成%%替换数字时没处理千分位分隔符导致1,000变成1000有次我替换客户地址中的St.为Street结果把St.Louis也改了整个美国中西部数据全乱套。现在我做重要替换前都会先用预览功能检查影响范围或者新建临时列先做测试替换。

更多文章