1. 数据清洗与变换的核心概念
数据清洗与变换是数据分析流程中最为关键的预处理环节。当原始数据存在缺失、异常、不一致等问题时,直接进行分析会导致结果偏差甚至完全错误。数据变换则是将清洗后的数据转换为更适合建模和分析的形式。
在实际项目中,数据清洗通常占据整个数据分析流程60%以上的时间。根据IBM的研究,数据科学家平均花费80%的时间在数据清洗和准备上。这充分说明了数据质量对分析结果的决定性影响。
常见的数据质量问题包括:缺失值(约占总数据量的5-15%)、异常值(3-8%)、不一致数据(如日期格式混乱)以及重复数据(电商数据中可达10%)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据清洗的完整流程与技术要点
2.1 缺失值处理的三层策略
缺失值处理需要根据业务场景和数据特性选择适当的方法:
-
直接删除法(适合缺失率<5%的情况):
python复制df.dropna(subset=['重要字段'], inplace=True)- 优点:操作简单,不影响数据分布
- 缺点:损失样本信息
-
统计填充法(适合数值型变量):
python复制# 使用中位数填充(抗异常值) df['收入'].fillna(df['收入'].median(), inplace=True) # 使用KNN填充(考虑特征相关性) from sklearn.impute import KNNImputer imputer = KNNImputer(n_neighbors=5) df_filled = imputer.fit_transform(df[['年龄','收入','消费金额']]) -
模型预测法(适合高价值字段):
python复制from sklearn.ensemble import RandomForestRegressor # 将数据分为有缺失和无缺失两部分 known = df[df['目标字段'].notnull()] unknown = df[df['目标字段'].isnull()] # 训练预测模型 model = RandomForestRegressor() model.fit(known[['特征1','特征2']], known['目标字段']) # 预测缺失值 predicted = model.predict(unknown[['特征1','特征2']])
2.2 异常值检测的四种武器
-
3σ原则(适合正态分布数据):
python复制mean, std = df['金额'].mean(), df['金额'].std() lower, upper = mean - 3*std, mean + 3*std outliers = df[(df['金额'] < lower) | (df['金额'] > upper)] -
IQR方法(适合非正态分布):
python复制Q1 = df['年龄'].quantile(0.25) Q3 = df['年龄'].quantile(0.75) IQR = Q3 - Q1 outliers = df[(df['年龄'] < Q1-1.5*IQR) | (df['年龄'] > Q3+1.5*IQR)] -
孤立森林(适合高维数据):
python复制from sklearn.ensemble import IsolationForest clf = IsolationForest(contamination=0.05) preds = clf.fit_predict(df[['特征1','特征2']]) outliers = df[preds == -1] -
可视化检测(快速验证):
python复制import seaborn as sns sns.boxplot(x=df['交易金额'])
2.3 数据一致性处理的实战技巧
- 日期格式标准化:
python复制from datetime import datetime def parse_date(date_str): for fmt in ('%Y-%m-%d', '%d/%m/%Y', '%m.%d.%Y'): try: return datetime.strptim
