常见的九种数据预处理方法,一次讲清
2026/6/16 17:51:38 网站建设 项目流程

“我的分析模型准确率为什么一直上不去?”

“为什么同样的算法,别人跑出来的结果比我的好那么多?”

如果你在工作中遇到过类似问题,很可能是因为数据预处理环节出了问题。

当你处理一份销售数据,发现30%的客户年龄字段是空白的,或者城市字段里“北京市”、“北京”和“Beijing”竟然被系统认为是三个不同的城市,这时候你就需要好好审视你的数据预处理流程了。

数据预处理做不好,后面的分析工作就很难顺利进行。

今天我将分享九种数据预处理的方法,这些都是我在实际工作中积累的经验。

顺便分享一份企业数据化建设知识地图,包括数据分析、数据库基本操作、挖掘建模等500个数据领域的细分知识点。需要自取:https://s.fanruan.com/ip0ko(复制到浏览器)


一、先看缺失值

打开数据集,第一件事就是看看哪些值缺了。

看到缺失值,很多人要么全删,要么随便用平均数补上。这两种做法都可能带来新问题。

  • 全删数据,样本变少,如果删的不是随机缺失的,结论就偏了。
  • 直接用平均数补,如果数据本身是偏的,比如工资数据,少数人工资极高,平均数就会拉高,补出来的值就不真实。

那应该怎么做?

需要根据情况决定。

  • 如果缺失的数据很少,比如一万行里缺几十行,删除影响不大,可以考虑删除。
  • 如果缺失较多,就需要填充。用均值、中位数还是众数?数据分布对称用均值,明显一边倒用中位数,分类数据用众数。说白了,就是看大多数数据长什么样,就让缺失值向大多数看齐。

用过来人的经验告诉你,高级方法比如回归插补,听起来好,但算起来麻烦。平时工作,把简单方法用对,就能解决大部分问题。


二、识别异常值

看到某些数据点明显偏离大多数,你是直接删除还是先研究一下?我敢说,很多人第一反应是删掉。

但异常值不一定是错误,它可能就是事实。

举个例子,一个地区销售额突然是平时的十倍,可能是数据录入时多打了个零,也可能真是搞了个爆款活动。直接删掉,可能就把重要的商业机会给忽略了。

检测异常值有常用的统计方法。
  • Z-score法:计算数据点与平均值的距离,如果超过3个标准差,就需要关注。这个方法适合数据形状比较规整的情况。
  • IQR法:通过计算四分位距来识别异常值,对数据分布没有特定要求。

找到异常值后,关键是根据业务知识判断。

这个值在业务上合理吗?

问一问相关业务人员,查看操作记录,比单纯依赖统计方法更可靠。如果是错误,就修正或删除;如果是真实情况,可以保留但单独处理。


三、处理重复值

你有没有遇到过,统计客户总数和订单数对不上的情况?很可能是有重复记录。

处理重复值,可以用 df.duplicated() 查找,用 df.drop_duplicates() 删除。但这里需要注意,有些记录看起来不同,实际上是重复的;有些看起来相同,实际不是重复。

比如,同一个客户,一条记录地址写“海淀区”,另一条写“海淀区(公司)”。系统严格比对,认为这不一样,但人一看就知道是同一个。这种叫近似重复,处理起来更麻烦,有时需要模糊匹配算法。

所以,处理前一定要弄清楚数据是怎么来的。
  • 如果是日志数据,同一秒内产生多条相同记录,很可能就是重复错误;
  • 如果是交易数据,同一个人买两次相同东西,那就是合理重复,不能删。

处理重复记录不只是技术操作,还需要理解数据背景。


四、标准化数据

数据中,身高以厘米为单位,数值大约一百多;体重以公斤为单位,数值大约几十。直接计算时,数值大的特征影响会更大,这显然不对。

标准化的目的是消除单位的影响,让不同特征在计算中有同等的重要性。

常用的标准化方法有两种:
  • Z-score标准化:处理后数据平均值为0,标准差为1。
  • Min-Max标准化:将数据缩放到0到1的范围内。

你该选哪个?

  • 如果你后续要用那些假设数据长得规整的模型,比如线性回归,就用Z-score;
  • 如果你没特殊要求,只想快速缩放,用Min-Max就行。

不过话说回来,如果数据里有非常离谱的异常值,标准化也会被带偏。所以,标准化通常在处理完异常值之后做。


五、转换数据

许多统计方法假设数据符合正态分布,但实际数据常常不符合这个假设。

数据转换,就是通过数学方法调整数据分布。
  • 对数变换:适用于数据集中在较小值范围,有少量极大值的情况。
  • 平方根变换:适用于计数类型的数据。
  • Box-Cox变换:功能更强大,可以调整参数,适应更多情况。

在实际项目中,对数变换后,模型效果提升是常见的。

但要注意一点:你转换数据训练了模型,将来用模型预测新数据时,新数据也要用同样的方法转换,预测结果如果需要解释,有时还得再转换回去。


六、编码分类数据

机器学习模型只能处理数值,不能直接处理文字。所以“男”、“女”这样的分类信息,需要转换成数字。

常用的编码方法有两种:
  • 标签编码:就是给类别编号,比如“北京”=1,“上海”=2。这里有个潜在问题:模型可能会认为“上海”比“北京”大,然后瞎琢磨出根本不存在的顺序关系。
  • 独热编码:为每个类别创建一个新列,如果数据属于该类别,对应列的值为1,否则为0。这样就彻底避免了顺序误会。

那该怎么选择编码方法?
  • 如果类别有自然顺序,比如低、中、高,可以用标签编码。
  • 如果类别没有顺序,比如城市、产品类型,应该用独热编码。

但独热编码有个缺点:如果类别有上百种,就会创造出上百个新列,数据一下子变得非常稀疏和庞大。这时候可能需要考虑其他方案,比如目标编码。


七、处理时间数据

日期时间字段,经常以各种格式的字符串混在一起,比如“2023-01-01”、“2023/1/1”。

第一步是将这些字符串转换为统一的时间格式。

时间数据包含很多有用信息,可以提取出来单独作为特征:
  • 基本部分:年、月、日、周几、第几季度。
  • 业务部分:是否是节假日、是否是周末。
  • 衍生部分:距离某个重要日期的天数、与上个月同期的比较。

原始的时间值本身信息有限,但提取出来的这些特征,往往是分析趋势、构建预测模型的关键。处理时,需要注意时区、闰年等情况,无效的日期也需要处理。


八、集成多个数据源

公司的数据通常散落在各处:客户信息在CRM系统,交易记录在订单数据库,产品详情又在另一个表里。数据集成就是将不同来源的相关数据合并在一起。

在Python中,可以用 merge() 函数合并数据表。

合并时需要注意选择合并方式:
  • 内连接:只保留两个表都有的记录。
  • 左连接:保留左边表的所有记录,右边表能匹配的保留,不能匹配的用空值。
听起来简单,但实际存在很多问题。

最大的挑战是实体对齐:A表里的“客户ID”,和B表里的“user_id”,可能指的是同一样东西,但名字不同,你需要先把它俩对应上。

另一个常见问题是数据冲突。比如同一个客户在两个系统中的电话号码不同。这时需要确定以哪个系统的数据为准。

随着数据源增多,用代码手动写merge会变得非常繁琐且容易出错。这时候,专业的数据集成平台就能派上大用场。

像FineDataLink这样的工具,它能通过可视化拖拽的方式,将来自CRM、ERP、财务系统乃至本地Excel表格的数据一键连接起来。

你不需要写复杂的关联代码,只需在界面上配置好数据源和关联关系,它就能帮你自动完成多表融合、整库同步的工作,把数据统一到一个企业级的数据仓库里。工具体验地址我放在这里,可以试试看:​​​​​​​https://s.fanruan.com/tx4dw(复制到浏览器)


九、抽取数据子集

数据不是越多越好。无关的特征和记录会增加计算量,也可能干扰分析。

数据抽取与子集化,就是做减法,聚焦核心。
  • 选择相关列:只保留与问题直接相关的特征。比如预测用户流失,登录IP可能就不如登录频率重要。
  • 选择相关行:只分析目标群体,比如只分析消费额超过一万元的客户。

这样做可以减少计算量,模型训练更快,结果更易懂,也更准。

但是,我必须提醒你,筛选必须有依据,不能乱删。如果只挑某一类样本,你的模型就只能学会预测这一类,拿到更广的数据上就会失灵。

数据预处理没有固定步骤,需要根据数据情况和分析目标选择合适的方法。

每次处理数据时,你可以按照这些方面逐一检查,根据实际情况决定如何处理。

一键get文中同款数据集成平台:​​​​​​​https://s.fanruan.com/tx4dw(复制到浏览器)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询