销售数据清洗实战:从脏数据到标准报表的完整流程

发布时间:2026/9/16 23:33:53
销售数据清洗实战:从脏数据到标准报表的完整流程 做销售数据分析的人最怕的不是数据量太大而是数据量看着不多、脏东西却一点不少。前几天我接到一份销售记录明细打开一看总共250行一开始觉得这个量级随便处理一下就行结果越往下翻越不对劲日期有三种格式金额里混着货币符号和千分位逗号客户名称有的带着奇奇怪怪的空格还有几行连订单号都是空的。这要是直接做透视表或者发给业务方分分钟被质疑数据质量。最终我花了大概一个下午把这份表洗干净从250行原始记录整理成了238条标准销售记录并输出了可以直接用于日报、周报和数据分析的标准报表。这篇文章就把整个清洗过程、判断逻辑和踩过的坑完整记录下来给同样被脏数据折磨的朋友做个参考。1. 先看清数据到底脏在哪250行销售记录的“体检清单”拿到任何一份数据我的习惯是不要急着动手改先花十分钟把整个表从头到尾翻一遍对“脏在哪、脏成什么样、大概有多少脏数据”有个整体判断。这就跟去医院体检一样先做全面检查再针对问题开方子。这回的250行数据体检完发现的毛病比我预想的多。1.1 我这批数据的第一个麻烦结构混乱这份Excel文件本身结构就有问题。第一行不是列名而是一句“XX公司2024年销售流水”第二行才是字段名销售日期、订单号、客户名称、销售区域、产品类别、产品名称、数量、单价、销售额、销售人员、备注。偏偏还有两行是这种信息数据中间夹着几个空行其中一个空行后面还跟着两行“小计本月合计XXX元”的汇总行。也就是说真正意义上的标题行下直接混入了非数据行和汇总行。这种情况我觉得是手工Excel表最常见的毛病人用Excel做记录时会顺手加一些说明、小计、汇总或者为了视觉美观敲几个空行。这些“辅助内容”对肉眼看表很友好但对程序化处理就是灾难。所以清洗的第一步不是改数据而是先把数据结构理清楚确认哪一行才是真正的表头把表头之外的所有说明、空行、汇总行统一标注或移除。1.2 脏数据的四个典型特征缺失、重复、不一致、异常值把结构理顺之后我习惯把脏数据归成四大类整理成一个问题清单方便后面逐个击破。这也是我给团队做数据清洗培训时最常用的分类框架。第一是缺失值。最常见的就是空单元格。这份表里订单号有2个空值客户名称有1个空值销售区域有3个空值备注列大量为空这倒不是问题——备注本来就是选填字段。真正要区分的是“关键字段空值”和“非关键字段空值”关键字段为空意味着这条记录存疑。第二是重复值。我初步扫了一遍发现有一些订单号出现了两次而且这几行不是一模一样就是只有某个字段不同。这个后面还得用排序和去重功能仔细确认。第三是不一致值。这是最琐碎也最耗时间的一类。单单日期列就有三种写法2024/5/6、2024-05-06、还有几个显示成45000这种数字样式的一看就是Excel把日期存成了序列号。客户名称里“北京华信科技有限公司”变成了“北京华信科技有限公司 ”末尾多了个空格、“北京华信科技有限公”少了“司”字。销售区域里的“华北”和“华 北”居然并存。数量、金额字段就更不用说了有的单元格是数字有的前面带着货币符号有的数字中间带着千分位逗号。第四是异常值。比如数量为0的销售记录单价高得离谱的“999999”销售额不等于数量乘单价的记录还有订单状态备注里写着“已退款”“已取消”但依然留在明细里的行。这类数据在业务上有特殊含义不能简单删除但也不能直接放进标准报表。1.3 动手前的三个动作备份、拍快照、列清单体检完之后我强烈建议先做三件事这三件事看起来不起眼实际能帮你省很多麻烦。第一个动作是备份原始文件。复制一份原始Excel命名为“销售记录_原始备份_20250103.xlsx”放到另一个文件夹。后面无论怎么折腾只要备份还在就可以大胆操作不用担心把数据改坏了。第二个动作是给数据“拍快照”。如果用的是Excel可以在“视图”里设置冻结首行然后截几张屏幕截图如果用的是Pandas直接df.info()、df.describe()和df.head()就是最好的快照。这一步的目的是留下一个“清洗前”的基准信息例如记录行数、字段数量、各列非空数量、数据类型等方便和清洗后的结果做对比。第三个动作是列一份“问题清单”。把刚才发现的所有问题逐条记录下来比如日期格式统一、订单号补全或剔除、客户名称去空格补错字、销售区域统一、删除退款单、剔除无效行。这其实就是一份清洗规则表的雏形。我在实际项目中一直坚持这条习惯先列规则再动手清洗否则改着改着就会忘了一步或者做出前后矛盾的处理。2. 清洗前先定规则为什么清洗之前要想清楚“标准报表”长什么样数据清洗最忌讳没有目标就开干边洗边想要什么结果。清洗的本质是从“原始数据”变成“标准报表”如果连标准报表的字段、格式、口径都没想清楚那清洗永远是跟着感觉走今天改一版明天又得推翻。2.1 标准报表的字段设计哪些列保、哪些列算在动手之前我先定义清楚最终报表的字段结构。这份销售记录原始字段里有11列但标准报表不一定要保留全部字段。“备注”列我决定先保留下来但设置一个筛选条件备注里含有“退款”“取消”“异常”字样的行需要标记出来并单独处理其余备注内容不影响统计。我最终定的标准报表字段为销售日期、订单号、客户名称、销售区域、产品类别、产品名称、数量、单价、销售额、销售人员一共10列。这10列中“销售额”虽然原始数据里有但我会用数量×单价重新计算一遍而不是盲目信任原始值。原因很简单Excel表里的金额经常是手工录入或者公式中途断掉造成的只有自己重算一遍才能保证后续的毛利率、客单价计算不自带脏数据。字段顺序也是我特意整理过的日期放第一列因为任何后续分析都要先按时间排序、做趋势然后是订单号作为每条记录的唯一标识接着是客户、区域这些维度字段再是数量、单价、销售额这些度量字段最后放销售人员方便之后做员工业绩分析。标准报表的字段顺序会影响别人使用时的直观感受这也是细节中的细节。2.2 用Excel还是Pandas这次我两套都用了关于工具我的经验是看数据量和个人习惯。几十行到几千行的数据用Excel手工操作完全够函数筛选分列去重能做得很精细几万行以上或者清洗流程需要反复复用用Python的Pandas更高效。这次250行的数据我实际是用Excel先摸了一遍底又把整个清洗流程用Pandas写了一遍因为我想把这次清洗规则沉淀成一个脚本以后每月数据来了直接跑一遍省得每次手工重复劳动。如果你不会Python也没关系Excel其实完全承担得了这个任务。我下面讲到的每个规则和操作都会标注Excel的操作路径和Pandas的实现方式你可以根据自己的情况选择。但不管用什么工具清洗逻辑是一致的工具只是实现手段。有一个点我要单独提醒如果用Excel在做任何“删除行”操作之前先把待删除的行用填充色标出来确认没有误伤后再一次性删除。别小看这个步骤我见过太多人因为直接删行把有用的数据也连带删掉最后只能重新来过。2.3 创建清洗规则表这招能少返工我在正式清洗之前做了一张“清洗规则表”把它作为本次清洗的元文档。规则表大概长这样序号问题类别涉及字段判断规则处理方式R1日期格式不一致销售日期包括/、-、Excel序列号三种格式统一转为2024-01-01格式R2金额格式问题单价、销售额带货币符号、千位符、文本数字去除符号并转为数值R3缺失关键字段订单号、客户名称、销售区域为空能根据其他字段推断则补全否则删除R4重复记录订单号订单号重复保留最后一条或合并处理R5业务上无效记录订单状态/备注备注含“退款”“取消”标记后从报表中剔除R6计算口径校验销售额销售额≠数量×单价重算销售额这张规则表贴在Excel旁边或者写在代码开头好处一是让你头脑清晰二是万一中途断开、隔天再来你看一眼规则表就能迅速进入状态三是后续别人接手这份数据时也能看懂你的清洗逻辑。数据清洗最大的坑不是不会用工具而是逻辑不透明洗完了自己都不知道哪些行被删了、为什么被删。3. 分字段清洗实操日期、金额、文本一个都别放过规则定好之后我开始按字段逐一清洗。顺序也很重要我习惯先把每个字段的“格式”问题处理完再处理行级去重和删除因为字段格式干净了后面判断重复和异常才会更准确。要不然日期格式还没统一去重时肉眼都很难判断两行到底是不是同一笔单。3.1 日期字段三种日期格式统一成标准格式日期清洗是这次遇到的最典型问题。原始销售日期列里面有2024/5/6这种斜杠格式有2024-05-06这种横杠格式还有45000这种Excel序列号。合在一起的时候Excel排序会乱掉比如把“2024/9/1”排在“2024-05-06”后面这谁看了都头大。在Excel里我的处理方式是选中这一列用“数据-分列”功能把日期列按分割符号拆成“年月日”再重新拼接成yyyy-mm-dd的标准格式对于显示为数字的单元格先用TEXT函数把它从序列号转成日期例如TEXT(A2,yyyy-mm-dd)。做完之后再用“筛选-按日期”检查一下看是否还有漏网之鱼。在Pandas里更加直接用pd.to_datetime()把这一列统一转换然后根据自己需要的格式格式化。我当时的代码大致是import pandas as pd df pd.read_excel(销售记录_原始备份_20250103.xlsx, skiprows1) df[销售日期] pd.to_datetime(df[销售日期], errorscoerce) df[销售日期] df[销售日期].dt.strftime(%Y-%m-%d)值得留意的是Excel里如果明明输入的是日期却显示成数字大概率是单元格格式被设成了“常规”。这种单元格用函数和Pandas都能识别但如果你不去转它排序和透视表就会把它当成普通数字处理。遇到这种问题确认一遍单元格格式非常关键。3.2 金额与数量字段去货币符号、补缺失、重算校验金额字段的脏主要表现为两种一种是单元格里带了单位或符号比如“1,200”“1200元”这种另一种是数据类型本身是文本虽然肉眼看着是数字但Excel计算时忽略它。数量列里还有一个单元格是“ 5”前面有空格在Excel的SUM求和里虽然可以正常算但在判断是否等于销售额时就会出问题。我当时的处理方式是先把“单价”和“销售额”两列复制到一个空白区域用查找替换把“”、“,”、“元”这些符号全部替换为空确保每个单元格只剩下纯数字或带有负号/小数的数字接着用VALUE函数或“分列-固定宽度”把文本型数字转成真正的数值型。在Pandas里可以用replace配合正则表达式一行搞定df[单价] df[单价].astype(str).str.replace([,元 ], , regexTrue) df[单价] pd.to_numeric(df[单价], errorscoerce)我要特别提醒一句处理金额字段时千万不要只盯着“有没有符号”最好再跑一遍数据类型检查。df.dtypes可以快速看出各列是不是数值类型如果有object类型却全是数字就要警惕文本型数字了。这个坑我当时是拿describe()和value_counts()对比出来的因为某一列的最高值和合计值怎么看都怪后来一查发现整列都是文本。补全缺失数值则要慎重。如果某条记录的数量为空我会优先看同一订单号下是否有另一条类似记录可以参考如果找不到依据就直接记入“待定”名单而不是拍脑袋填一个数字。金额这种关键字段宁可让它在缺值名单里待着也不要编一个“看起来合理”的数字进去。最后一步是重算校验。我用了一个辅助列让Excel计算“数量×单价”然后和“销售额”列做比较筛选出不相等的数据。结果发现了2行一行是单价从5被写成了50销售额却是按5算的另一行是销售额单元格里带了隐藏字符导致计算时被忽略。这两个问题如果不去重算校验直接影响后面所有的月度汇总和客单价分析。3.3 文本字段去空格、修补错别字、统一区域叫法文本字段的清洗脏起来最烦人因为它往往肉眼看不出来。客户名称这个字段我把整列拉到最宽按字母/拼音排序后发现了三类问题。第一类是头尾空格。Excel用户经常用“全角空格”或者从其他系统复制数据时自动带上空格表现为“北京华信科技有限公司 ”看起来和“北京华信科技有限公司”一模一样但如果用VLOOKUP匹配就永远匹配不上。处理方式在Excel里是TRIM函数在Pandas里是strip()df[客户名称] df[客户名称].str.strip()第二类是漏字错字。比如有两条“北京华信科技有限公”少了“司”还有一条“北京华信科技股份有限”把“有限公司”写成了“股份有限公司”。这种错误用自动化的方式不好完全避免因为不同公司名称之间本来就相似我的判断标准是如果客户名称只差一个字、且其他字段如订单号、区域、金额明显属于同一客户就统一改成最完整的“北京华信科技有限公司”如果拿不准就在备注里标一下。千万别小看这种1-2个字的差异它会让客户维度的汇总表里多出两三个“假客户”。第三类是枚举值不统一。销售区域列有“华北”“华 北”“华南”“华东”等其中“华 北”显然是手误。处理方法是把枚举值先列出来可以用数据透视表或value_counts然后统一映射成标准叫法region_map {华 北: 华北, 华北: 华北, 华南: 华南, ...} df[销售区域] df[销售区域].map(region_map).fillna(df[销售区域])文本字段清洗有一条原则遇到不确定的统一口径宁可在备注里留一行说明也别把两个可能不同的值强行合并成一个。比如“北京华信科技有限公司”和“北京华信科技股份有限公司”虽然只差两个字但如果我不能确认它们是不是同一个法人主体我就不去强行合并最多在备注里写“疑似同一客户需业务确认”。3.4 空值处理先分清楚“该有而没有”和“本来就没有”对空值处理我的标准是“区分类型”而不是一刀切。第一类是该有而没有的空值。比如订单号为空这条记录等于没有身份凭证客户名称为空则没法归到任何客户维度。对这种关键字段的空值我的原则是如果能从其他记录中合理推断比如同一笔订单拆成了两条、另一条有完整客户名那就补上如果完全无法推断就进入“无效记录”名单。第二类是本来就没有的空值。比如“备注”列大部分为空并不影响销售统计。再比如“产品名称”为空但“产品类别”有值如果结合订单号能判断出具体产品也可以补否则直接把“产品类别”当作统计维度也行。关键是不要因为一个非关键字段为空就删掉整条记录那样会很可惜会把有用的销售数据白白扔掉。这次实际处理空值时我并没有立即删除而是先把所有关键字段含空值的行筛选出来复制到另一个Sheet命名为“待定区”等把所有字段清洗完、再判断了业务上下文后才决定哪几行补全、哪几行删除。这种“先隔离、后判断”的做法给了自己一个缓冲期避免了“看到空就删”的冲动。4. 行级清洗从250行到238条删掉的12条都是什么来头字段级别的清洗相当于把每个单元格的“外包装”清理干净而行级清洗才真正决定最终的记录数。250行原始数据清洗后剩下238条标准记录意味着有12行被剔除了。这12行并不是随意删的每一行都对应着明确的判断逻辑。我把它拆成下面几类也正好是销售数据里最常出现的问题。4.1 重复记录完全重复和主键重复要分开处理经过字段清洗后重复判断就变得简单了。我先按“订单号”排序再用Excel的COUNTIF函数检查订单号是否重复发现一共有4条记录存在重复问题。其中3条是完全重复两个字段全部一致大概率是系统导出时重复了直接删掉多余行保留一行即可。还有1条是订单号相同、但销售日期不同这对我这种靠订单号当唯一标识的表来说属于“主键重复”不能简单删除某一行而是要判断哪一个才是真正有效的记录。我当时联系了内部业务人员确认该订单发生过一次修改属于数据被重复登记了两遍保留较晚登记的一条删掉另一条。这个判断过程也写进了备注避免后人看不懂为什么删。其实订单号是判断销售记录唯一性的天然主键如果订单号本身不唯一比如有的公司一个订单会拆成多行明细那就要用“订单号产品名称销售日期”联合判断重复而不是只盯订单号。这里想强调的就是重复的定义不能太草率要看你的业务口径。4.2 整行无效空行、只有零星字段的行直接清掉第4.1节删除的只是重复记录接下来要处理的是从源头就没意义的行。原始Excel里有2行空行以及在表头下方、数据行中间有几行只填了“小计”或个别字段的“伪数据行”。这些行的特点是它们不是销售记录而是手工报表的残留物。比如有一行只有“小计本月合计”和销售额数字其他字段全部为空这种行在透视表和自动汇总时会被当成一条“没有任何维度的记录”要么让合计翻倍要么让统计出现真空行。处理方式很明确整行删除。判断依据是如果一行里除了一个汇总类描述之外没有任何业务字段它就是辅助行不是数据。但删除前我留着它们直到字段清洗完才动手因为我要确保它们是“始终无意义”的而不是“某些字段漏填被误伤”。4.3 业务上不算销售的记录退款单、取消单别硬留这一部分是这次清洗中最需要业务判断的部分。原始数据里有7条订单的备注中包含了“退款”或“取消”字样。从字面上看它们确实记录了销售行为但实际上退款和取消意味着最终没有形成收入。如果把这些行留在标准销售报表里月底汇总销售额时就会虚高还影响退款率、净销售额等指标。处理方式有两个选择第一直接删除第二加一列“记录状态”标记为“已退款/已取消”再决定是否计入销售统计。我在这次清洗中选择了第二种方式因为删除虽然能让数据“干净”但失去的是业务可追溯性。标准报表中多出一列“记录状态”后面做分析时可以通过筛选只统计正常销售也可以随时回看退款数据。报表字段里我取消了备注列但保留“记录状态”因为标准报表不应该承载随意性的备注却需要承载可控的状态枚举。7条记录的处理规则是这样的备注含“退款”或“取消”的状态标记为“已退款”/“已取消”然后在最终标准报表中筛掉备注里有“售后退换”但订单号没有对应新订单的我选择保留因为它是真实销售行为的一部分只是后续退了货这取决于公司分析口径。我建议你接手数据时先确认公司的“销售”定义是订单创建就算还是回款才算这直接决定这类记录的去留。4.4 异常值处理不是所有的“奇怪值”都该删行级清洗的另一个重点是异常值。我在体检时发现数量为0的有1条单价为999999的有1条销售额为负数的有2条。这类值看着很刺眼新手往往一上来就想删掉。但实际上它们要分情况讨论。数量为0的这条记录订单号和客户名称都完好我判断是“误录入”因为备注里写着“赠品”赠品数量为0本身不合逻辑应该是“数量为空”或者“数量1”。这种直接看业务备注就能判断我在备注里保留“赠品”字样把数量修正为1不做删除。单价999999那条订单号是唯一的但产品名称却是“办公桌”正常办公桌不可能这么贵我把这条记录拉出来一看发现后面的“销售额”列也是999999明显是录入的时候重复敲了同一个数字。这种没有其他依据可参考的异常我的处理方式是单独标记、单独检查不急着删留待和业务确认。如果确认是录入错误且不知道真实值再考虑从数据集中排除并记录原因。销售额为负数的2条我反而没有删因为备注里写着“退款-订单XXXX”这其实和退款单是同一类业务。负数销售额如果直接删掉会导致整体收入被高估。我当时通过订单号关联把这2条写成“已退款”状态并纳入退款统计而不是当垃圾丢掉。所以异常值处理的正确姿势是先看懂它为什么异常再决定怎么处理。不要一看异常就删也不要放着不管——前者会弄丢信息后者会把错误带进分析。5. 数据校验与标准报表生成经过前面四轮清洗数据已经基本“干净”了。但这还不够我每次都会再做一次全面的数据校验因为数据清洗这件事最怕的就是自认为洗干净了结果一拉到透视表就发现各种问题。校验通过后才正式导出标准报表。5.1 清洗后的交叉校验COUNTIF去重、金额勾稽、日期排序清洗之后的校验我做了三个维度的检查相当于给数据做“出院前复查”。第一个是重复值复查。用COUNTIF对订单号再跑一遍确认没有任何重复值同时用“条件格式-突出显示重复值”在全表所有列走一遍发现两个字段组合下没有任何重复。在Pandas里我用df.duplicated().sum()来确认重复行数为0再用df[订单号].is_unique确认订单号唯一。第二个是金额勾稽。把“数量×单价”和“销售额”两列做差要求所有行的差值为0。这一步能保证后续任何汇总口径都不会打架。这轮校验中我前面修正的那两行全部通过说明问题确实修掉了。如果还有差异就要回头查是数量、单价还是销售额本身的问题。第三个是日期排序。把销售日期按升序排列检查是否有日期远超当前时间的“未来单”或者早于公司成立年份的“历史单”。有些脏数据会把年份弄错比如2023年误写成2033年不在排序里看一眼很难发现。我这里没发现这种荒谬值但检查这一步不能省。这三项都通过后我还会做一次抽样人工复核从清洗后的238条里随机抽10条对比原始备份看看每一条的修改点是否合理。这个动作虽然费点时间但能让我对最后输出的报表有信心。5.2 导出标准报表数据结构、字段顺序与格式化细节校验通过后我导出了最终的标准报表。我用了CSV格式导出因为CSV是最通用的数据交换格式不管后续接BI工具、做透视表、还是导入数据库都很方便。但导出前我又处理了几个细节第一数字格式统一保留两位小数但不在单元格里显示千分位逗号。显示层和存储层的格式要分开原始数据里带千分位逗号是脏标准报表里存纯数字才是规范。如果展示给老板看可以在Excel里再设置显示格式但数据文件本身必须是干净数值。第二日期统一为yyyy-mm-dd不带时分秒。这份销售记录粒度就是“天”不需要时间戳带上时分秒反而会增加透视表分组的麻烦。如果以后有分钟级别的数据再单列时间字段。第三我加了一列“记录状态”取值为“正常”或“已退款/已取消”。这样标准报表既能快速筛选正常销售数据也能在需要时把退款数据捞出来不影响核心销售统计。提醒一下加这个字段一定要在导出前加不要等报表发出去了、别人问“退款单怎么不见了”再加。第四检查了列名里没有空格和特殊字符。列名里的空格在下游数据分析时经常造成麻烦比如“销售额 ”和“销售额”是两个不同的字段名。我的做法是统一用中文不带空格的标准字段名销售日期、订单号、客户名称、销售区域、产品类别、产品名称、数量、单价、销售额、销售人员、记录状态。导出的代码也很简单Pandas一行df_clean.to_csv(销售记录_标准报表_20250103.csv, indexFalse, encodingutf-8-sig)注意encoding用了utf-8-sig这样可以避免CSV用Excel打开时出现中文乱码这也是我踩过几次坑之后才养成的习惯。5.3 清洗日志干完活以后最值钱的产物很多人清洗完数据就直接交报表了但我强烈建议你多花十分钟写一份“清洗日志”。形式可以是单独的Excel标签页也可以是一段README文本。内容包括原始数据多少行、清洗后多少行、删除了哪些行、为什么删除、修改了哪些字段、修改前和修改后的值分别是什么、以及清洗用的规则表。我这份清洗日志大概长这样原始数据250行清洗后238条标准记录删除重复记录4行3行完全重复1行主键重复且经业务确认保留较新记录删除空行/辅助行2行标记并剔除退款/取消记录7条在“记录状态”中标记正常统计中筛除修正日期格式全列统一为yyyy-mm-dd修正金额格式去除货币符号、千分位符号重算校验销售额修正文本问题客户名称去空格、补错字销售区域统一枚举值这份日志的价值至少有三层一是帮你自检把每一步处理重新过一遍二是给接手数据的同事或下游用数的人看避免他们质疑为什么数字对不上三是下次再遇到类似数据你直接照着日志的清洗规则重新跑一遍就行不用再从零梳理。6. 常见问题与排查技巧实录每次清洗数据总会有那么几个问题在中间跳出来这次也不例外。我把这次遇到的典型问题和排查思路整理成了一份速查表也顺带写几个提升效率的独家小技巧希望对你有用。6.1 问题速查表日期、重复、空格、退款单怎么处理临时问题表现排查思路处理方式日期格式混乱2024/5/6、2024-05-06、45000并存用筛选或类型检查找到所有非标准格式Excel分列/TEXT函数Pandas用to_datetime统一文本型数字单元格左上角有绿色三角求和异常用SUM直接求和看结果是否明显异常VALUE函数或Pandas的to_numeric隐藏空格VLOOKUP匹配不上COUNTIF计数偏低用LEN函数对比字符长度TRIM函数或strip()并检查全角空格重复记录透视表记录数比预计多用COUNTIF检查订单号重复完全重复直接去重主键重复需判断保留哪行退款单残留月收入虚高筛备注列含“退款/取消”标记“记录状态”标准报表中筛除金额勾稽不平销售额不等于数量×单价增加辅助列做差筛查修正单价或销售额以重算值为准这张表不一定覆盖所有场景但销售类数据遇到的高频问题基本都在里面了。如果遇到表里没提到的问题我的建议是先把问题具体化例如“某列有100个不同值但按业务口径应该只有5种”然后再根据具体问题去找对应的清洗方法。6.2 三分钟自查清洗完怎么快速判断自己有没有漏清洗完数据后如果不想一份份人工校验我有一套三分钟自查流程推荐给所有做数据清洗的人。第一步用透视表快速看一眼各个维度的合计值。把销售日期拖到行区域销售额拖到值区域按月汇总一次跟业务常识对照这个月销售额大概是多少、订单数量大概是多少如果差了数量级肯定有问题。第二步对关键列做一次去重计数。在Excel里用“删除重复项”功能或者在Pandas里用nunique()对比清洗前后的唯一值数量。比如客户名称的去重数如果比预期少太多可能是过度合并了如果比预期多可能是漏合并了。第三步重新运行一次“重复值检查”和“金额勾稽检查”确认这两项都是0问题。这是最能反映“清洗有没有漏”的硬指标。第四步随机抽3-5条记录从原始备份里按订单号反查人工确认一下这些记录从原始数据到标准报表的“旅途”是否合理。这一步相当于抽检能帮你发现那些“自动化规则无法识别”的个例问题。这套自查流程走下来基本能保证交付的报表经得起推敲。我见过很多分析报告本身逻辑没错但基础数据里残留了一两条脏记录就导致整个结论被质疑——清洗后的自查就是在给分析结论上保险。6.3 独家建议这四类脏数据你迟早也会遇到最后我再分享几个这十几年攒下来的独家建议不一定都是这次清洗中遇到的但都是销售数据里频繁出现的问题。第一类系统导出时自动追加的“合计行”和“总计行”。很多CRM系统导出Excel时可能因为勾选了一个选项就在数据末尾带上“合计”。这种行如果混进数据透视表会全部翻倍。解决方法是在导出时就关掉“显示汇总行”如果已经导出来了就按“合计/总计”关键字筛出来删掉。第二类Excel公式残留导致的“假空白”。有些单元格看着是空的实际上里面是这会让ISBLANK判断失效也会在透视表里显示一个“空白”项。这种问题用定位条件-空值看不出来需要检查单元格格式和公式。在Pandas里这种空字符串和NaN是不同的处理时要用replace(, pd.NA)转换一下。第三类统一口径的半角全角问题。不只客户名称产品名称、地区名称里都可能混入全角空格、“”和“()”混用、“﹒”和“.”混用。这种细节很容易被忽略但会让group by和筛选结果多出很多“影子分类”。我的处理办法是把所有中文场景下的标点统一成中文标点英文场景下的统一成英文标点并尽量去掉所有首尾空格。第四类Excel里明明设置了单元格格式却依然“对不齐”的数字。比如某个单元格是常规格式显示出来却是科学计数法例如1.23457E17这种通常是超长数字ID解决办法是先把格式设为文本再重新录入或从源头导出为文本格式。销售订单号如果被Excel自动转成科学计数法是最让人头大的问题之一没有开发权限时我一般会使用CSV编辑器或数据库查询来绕开Excel的自动类型转换。清洗数据这件事看着是体力活但真正的门槛在于对业务的判断什么该删、什么该留、什么该改、什么该问。我在处理这250行销售记录时最大的体会就是规则和日志比工具本身更重要。工具是效率规则是安全日志是沉淀。如果你也正在被类似的脏数据困扰建议先别急着写代码或拖函数先找张纸把数据从头到尾翻一遍把问题一条条列下来把标准报表的字段和口径定下来再动手。整个过程虽然多花了几分钟但后面每一步都会顺很多。这次的清洗规则和脚本我保留了下来下个月拿到新数据时我会先对照规则表跑一遍再人工抽检几行基本就能做到又快又不漏。最后再分享一个小习惯交付报表之后我总会把清洗完之后的结果和原始备份放在同一个文件夹里命名加上日期和“备份/标准报表”的标记这样万一过两个月有人问“这个数字当初是怎么来的”我可以直接翻出当时的数据和日志说清楚每一个数字的来龙去脉。数据清洗这件事做得越透明后面的分析才越有底气。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询