Pandas数据清洗实战:缺失值、重复值与异常值
数据导入与质量概览:先判断数据哪里有问题
在开始任何清洗操作前,必须建立“先诊断、后清洗”的原则。使用 pd.read_csv 导入数据后,切勿直接调用删除函数。首先通过 df.head() 观察前几行数据的实际排版与字段含义,确认是否存在错位或乱码。接着运行 df.info() 查看各列的数据类型与非空计数,快速定位如 object 类型中混入的数值字段或时间格式异常。配合 df.describe() 可获取数值列的均值、标准差与分位数,初步感知数据分布范围。最关键的一步是执行 df.isna().sum(),它能按列统计缺失值总量,结合 df.shape[0] 计算缺失比例。例如,若某关键字段缺失率超过百分之三十,则需评估是否保留该列。这一系列探查操作能构建完整的数据质量画像,避免盲目清洗导致有效信息流失。

缺失值处理:删除、填充与按业务规则处理
Pandas 将缺失值统一表示为 NaN、None 或 NaT,可通过 df.isna() 生成布尔掩码进行精准定位。处理缺失值时,切忌无条件使用 df.dropna(),这极易造成样本量断崖式下跌。应结合缺失比例与业务语义制定策略:对于缺失率低于百分之五且非核心字段,可直接 dropna();对于连续型数值,推荐使用 fillna 配合中位数填充以降低极端值干扰;对于分类字段,可用众数填充。更高级的做法是分组填充,例如 df.groupby 后使用 transform 进行组内中位数填充,这能保留组内分布特征。填充完成后,务必再次调用 df.info() 与 df.describe(),确认数据类型未发生隐式转换,且统计分布未出现人为扭曲。

重复值处理:判断哪些重复数据真的应该删除
重复数据分为完全重复与业务主键重复两类,处理前必须明确业务逻辑。使用 df.duplicated() 可返回布尔序列标记重复行,默认 keep 参数为 first 保留首次出现记录。若需彻底删除,调用 df.drop_duplicates() 即可。但实际业务中,更常见的是基于特定字段去重,例如指定 subset 为订单号与用户ID,并设置 keep 为 last,这能确保同一订单的最新状态被保留。必须警惕的是,并非所有重复都是脏数据:例如用户多次重试提交的日志、同一商品在不同渠道的报价记录,在业务上均属合法。盲目去重会破坏业务链路。因此,执行去重前应先用 duplicated 提取重复样本进行人工核对,确认属于系统冗余或录入错误后再执行删除操作,并记录删除条数以备审计。

异常值识别与处理:不要把异常直接当成错误
异常值识别需融合统计方法与业务常识,切忌将离群点直接等同于脏数据。首先通过 describe 观察极值,随后采用四分位距法进行量化筛选:计算第一四分位数与第三四分位数,得出四分位距,异常边界通常设定为 Q1 减去一点五倍四分位距至 Q3 加上一点五倍四分位距。利用布尔索引可提取疑似异常记录。提取后必须结合业务场景溯源:若是录入错误,应予以修正;若是真实发生的极端交易,则应保留或采用 clip 方法进行温和截断,避免破坏模型训练。统计规则仅提供线索,最终决策权在业务逻辑,机械套用删除规则会导致关键业务信号丢失,甚至引发后续分析结论严重偏离实际。

清洗结果验证与常见避坑:确保数据真的变干净了
清洗并非终点,二次验证是保障数据可用性的核心环节。首先对比清洗前后的 df.shape,确认行数变化是否符合预期,避免误删。接着重新运行 isna().sum() 与 duplicated().sum(),确保缺失与重复指标已降至业务可接受阈值。针对异常值,检查处理后的极值是否落在合理区间内,并验证关键字段的唯一性。同时,对比核心统计指标的波动幅度,若填充或截断导致指标偏移过大,需回溯调整策略。常见避坑指南包括:严禁滥用 inplace 参数导致原始数据不可逆丢失,清洗前务必执行 copy 备份;填充时需评估是否引入分布偏差;去重前必须核对业务主键;异常值处理需保留溯源记录。只有完成全链路验证,才能输出高质量数据集。

本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













