1. 数据噪声识别从源头发现问题数据清洗的第一步永远是识别问题。就像医生看病要先诊断一样处理脏数据前必须准确识别噪声类型。我处理过电商平台的用户行为数据经常遇到几种典型噪声缺失值用户年龄字段空着不填就像调查问卷里的空白选项异常值某个用户的购物金额显示为999999元明显超出正常范围重复记录相同的订单ID出现多次像复印机卡纸产生的重复页格式混乱日期字段里混着2023/01/01和01-Jan-2023多种格式最近处理的一个真实案例是某外卖平台的订单数据。用Python的pandas做初步探查时发现了大问题import pandas as pd df pd.read_csv(food_orders.csv) print(df.isnull().sum()) # 检查缺失值 print(df.describe()) # 发现配送费最大值竟是9999元这个简单的探查就揪出了两个致命问题30%的餐厅评分缺失部分订单配送费异常偏高。如果不处理就直接分析得出的结论可能会完全错误。2. 缺失值处理的五种实战方案面对缺失值我有套组合拳经常用。上周刚帮一个医疗数据分析项目处理过体检报告的缺失数据这里分享最实用的五种方法均值/中位数填充适合连续型数据。比如血压值缺失时用同年龄段患者的血压中位数填充更合理。Python实现很简单df[blood_pressure].fillna(df.groupby(age_group)[blood_pressure].transform(median), inplaceTrue)众数填充对分类变量特别有效。比如某患者的血型未填写可以用数据集中最常见的O型血来补全。预测模型填充更智能但复杂。我用过随机森林预测缺失的房价比简单均值准确20%以上。核心代码from sklearn.ensemble import RandomForestRegressor model RandomForestRegressor() model.fit(df_notnull, y_notnull) df_null[predicted] model.predict(df_null)删除记录要谨慎。只有当缺失比例很低5%且随机缺失时才考虑否则会引入偏差。标记法是我的秘密武器。在金融风控项目中我会新增一个is_missing字段标记缺失保留原始数据的缺失模式。3. 异常值检测的三重防线异常值就像数据里的坏苹果我总结了三道防线来应对统计方法最常用。IQR四分位距法是我的首选比简单的3σ原则更稳健Q1 df[amount].quantile(0.25) Q3 df[amount].quantile(0.75) IQR Q3 - Q1 df df[~((df[amount] (Q1 - 1.5*IQR)) | (df[amount] (Q3 1.5*IQR)))]可视化检测很直观。箱线图能一眼看出异常点热力图可以发现变量间的异常关系。最近用Plotly的交互式图表帮客户发现了隐藏的刷单行为。机器学习方法适合复杂场景。用Isolation Forest算法检测信用卡欺诈比传统方法准确率提升35%from sklearn.ensemble import IsolationForest clf IsolationForest(contamination0.01) df[anomaly] clf.fit_predict(df[[amount,frequency]])4. 数据标准化的实战技巧不同量纲的数据就像说不同语言的人标准化就是给他们配翻译。我常用的方法有Min-Max归一化适合图像像素值处理。将数据压缩到[0,1]区间df[normalized] (df[value] - df[value].min()) / (df[value].max() - df[value].min())Z-score标准化在金融建模中表现更好。使数据服从标准正态分布df[standardized] (df[value] - df[value].mean()) / df[value].std()小数缩放简单粗暴但有效。把所有数值除以该列最大值的10的幂次df[scaled] df[value] / 10**np.ceil(np.log10(df[value].abs().max()))在最近的一个多源数据融合项目中不同系统的传感器数据量纲差异巨大。经过标准化处理后模型准确率从65%提升到了89%。5. 文本数据清洗的独门秘籍非结构化文本是最难啃的骨头我总结了一套清洗流程编码统一是基础。处理中文文本时遇到过各种编码问题现在固定用text text.encode(utf-8, ignore).decode(utf-8)特殊字符处理要细心。保留有用的标点去除乱码import re text re.sub(r[^\w\s\u4e00-\u9fff], , text) # 保留中英文和空格停用词过滤有讲究。不建议直接用现成的停用词表要根据业务自定义my_stopwords [有限公司, 股份有限公司] stopwords.words(chinese) text .join([word for word in text.split() if word not in my_stopwords])在舆情分析项目中这套方法使文本特征维度减少了60%而关键信息保留完整。6. 自动化清洗管道的搭建手工清洗适合小数据但面对TB级数据需要自动化。我常用的技术栈是Airflow调度整个流程。每天凌晨自动跑清洗任务失败自动重试from airflow import DAG dag DAG(data_cleaning, schedule_interval0 3 * * *)PySpark处理大数据。去年用下面这段代码处理了千万级用户画像from pyspark.sql.functions import when df df.withColumn(age, when(df.age 0, None).otherwise(df.age))质量检查不可少。我写的自动化质检脚本会生成这样的报告[数据质量报告] 缺失值比例: 0.33% ✔ 异常值比例: 1.02% ✔ 唯一性检验: 通过 ✔这套系统为某电商节省了80%的数据准备时间现在他们的分析师可以直接用清洗好的数据做决策。