数据清洗是数据分析前最关键的一步,需用Pandas快速识别缺失与重复数据、合理填充缺失值、修正数据类型,并结合标准差法、IQR法及业务规则处理异常值。

数据清洗是数据分析前最关键的一步,Pandas 是 Python 中最常用、最高效的工具。掌握核心技巧和异常值识别处理方法,能大幅减少后续建模误差,提升分析可信度。
快速识别缺失与重复数据
缺失值(NaN)和重复行是清洗中最常见的问题。用 df.isnull().sum() 可一键统计每列缺失数量;df.duplicated().sum() 返回重复行总数。注意:重复判断默认检查所有列,若只需按关键字段(如用户ID、订单号)去重,应使用 df.drop_duplicates(subset=['user_id'], keep='first'),避免误删有效记录。
- 对数值型缺失,优先考虑中位数填充(抗异常值干扰),而非均值
- 对分类变量缺失,可新增类别如“Unknown”,不建议直接删除整行(尤其样本少时)
- 用 df.info() 查看数据类型,常发现本该是数值的列被读成 object(如含空格或单位“kg”),需先 .str.replace() 再 .astype(float)
高效处理异常值:三类实用策略
异常值不等于错误值,需结合业务判断。Pandas 配合 NumPy 提供灵活检测方式:
- 标准差法:适用于近似正态分布,如 df[(np.abs(df['price'] - df['price'].mean()) > 3 * df['price'].std())]
- IQR 四分位距法:更稳健,计算 Q1-1.5×IQR 和 Q3+1.5×IQR,用布尔索引过滤,适合偏态数据
- 业务规则硬过滤:如年龄>120 或<0、订单金额为负、时间戳超出合理范围,直接用 df.query('age >= 0 and age
处理方式依场景而定:删除(样本充足)、截断(cap/floor,如把价格>99分位设为该分位值)、或单独标记为新列(如 df['is_outlier_price'] = outlier_mask),保留信息供后续分析。
立即学习“Python免费学习笔记(深入)”;
字符串与时间字段的清洗要点
真实数据中,日期和文本常混杂空格、大小写、格式混乱。Pandas 的 .str 和 pd.to_datetime() 是利器:
- 统一字符串:用 .str.strip().str.lower() 去首尾空格并小写;含多种分隔符(如“/”、“-”、“.”)的日期,pd.to_datetime(df['date'], errors='coerce') 自动解析,失败转为 NaT,便于定位脏数据
- 提取结构化信息:如从邮箱提取域名 df['email'].str.split('@').str[1],或从地址中抽省份 df['addr'].str.extract(r'(北京|上海|广东)')
- 时间特征工程:转换后可用 .dt.year、.dt.dayofweek 等快速生成周期性变量,但注意时区与缺失值传播
链式操作与函数封装提升复用性
清洗逻辑往往多步嵌套,易出错且难维护。推荐用 Pandas 链式写法 + 自定义函数:
- 用 .pipe() 把清洗步骤模块化,如 df.pipe(clean_numeric).pipe(handle_outliers).pipe(encode_categories)
- 将通用逻辑封装成函数,例如 def fill_na_by_group(df, group_col, target_col, method='median'):,支持按用户、地区等分组填充,避免全局填充失真
- 保存清洗后的数据时,用 df.to_parquet() 替代 CSV,保留数据类型、速度快、支持压缩,适合迭代开发










