首页 > 其他资讯 > Pandas 入门三:数据清洗必学!缺失值/重复值处理,一步到位不踩坑

Pandas 入门三:数据清洗必学!缺失值/重复值处理,一步到位不踩坑

时间:26-04-25

掌握 Pandas 数据清洗:缺失值处理与重复值一键去重

欢迎回到我们的Pandas系列。在前两期打好基础后,我们现在要直面数据处理中最关键的环节——数据清洗。缺失值与重复值是影响分析准确性的两大常见问题,本文将为你提供清晰、可复现的解决方案。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

(前文回顾:《Pandas 入门一:零基础也能懂!3步安装+10分钟玩转数据读取》《Pandas 入门二:DataFrame 核心操作,新手也能轻松筛选/修改数据》)

现实世界的数据集很少是完美无瑕的。原始数据中常存在空白单元格(缺失值)或完全相同的记录行(重复值)。这些数据质量问题若不解决,将直接扭曲后续的分析结果。本文将引导你使用Pandas高效地完成这两项核心清洗任务。

一、数据准备:创建示例数据集

首先,我们导入Pandas并创建一个包含典型数据质量问题的示例DataFrame。运行以下代码,生成用于练习的数据集。

import pandas as pd

# 创建带缺失值、重复值的示例数据(模拟真实场景)
data = {
    ‘姓名’: [‘张三’, ‘李四’, ‘王五’, ‘张三’, None, ‘赵六’],  # None表示缺失值
    ‘年龄’: [25, 30, None, 25, 35, 35],  # 空白单元格对应None
    ‘城市’: [‘北京’, ‘上海’, ‘广州’, ‘北京’, ‘深圳’, ‘深圳’],
    ‘工资’: [8000, 12000, 10000, 8000, None, 10000]
}

# 转为DataFrame(表格格式)
df = pd.DataFrame(data)
print(“原始带脏数据的表格:”)
print(df)

执行代码后,你将看到一个包含NaN(Not a Number,表示缺失)和重复行的DataFrame。在Pandas中,NaN即代表缺失值。

原始带脏数据的表格:
      姓名    年龄  城市      工资
0    张三  25.0  北京   8000.0
1    李四  30.0  上海  12000.0
2    王五   NaN  广州  10000.0
3    张三  25.0  北京   8000.0  # 这行是重复值
4   None  35.0  深圳      NaN
5    赵六  35.0  深圳  10000.0

二、缺失值处理:检测与应对策略

缺失值指数据表中的空单元格,在Pandas中显示为NaN或None。标准处理流程分为两步:首先定位缺失值,然后选择删除或填充。

1. 缺失值检测方法

# 方法1:查看每列缺失值的数量(最常用)
print(“=“*30)
print(“每列缺失值数量:”)
print(df.isnull().sum())  # isnull()判断是否为缺失值,sum()统计个数

# 方法2:查看缺失值占比(更直观)
print(“=“*30)
print(“每列缺失值占比:”)
print((df.isnull().sum() / len(df)).round(2))  # 除以总行数,保留2位小数

# 方法3:快速查看数据整体情况(包含缺失值)
print(“=“*30)
print(“数据整体信息:”)
df.info()  # 会显示每列非空值数量、数据类型

运行上述代码,可以快速定位到“姓名”、“年龄”、“工资”列各存在一个缺失值。这为后续处理提供了明确目标。

2. 核心缺失值处理方法

(1) 删除缺失值(适用于缺失比例较低的情况)

当缺失记录数量很少时,最直接的方法是删除包含缺失值的行。使用dropna()方法实现。

# 删除包含缺失值的行(默认axis=0,删行;axis=1删列,不常用)
df_drop = df.dropna()
print(“=“*30)
print(“删除缺失值后的表格:”)
print(df_drop)

操作后,所有包含NaN的行将被移除,得到一个完整的数据子集。

(2) 填充缺失值(适用于缺失比例较高或需要保留数据量的情况)

若缺失值较多,直接删除会导致样本量大幅减少,此时应考虑填充。核心思路是用合理的估计值替换缺失位置,使用fillna()方法。

# 复制原始数据,避免修改原数据(新手好习惯)
df_fill = df.copy()

# 1. 数值型列(年龄、工资):用均值/中位数填充(更合理)
df_fill[‘年龄’] = df_fill[‘年龄’].fillna(df_fill[‘年龄’].mean())  # 均值填充
df_fill[‘工资’] = df_fill[‘工资’].fillna(df_fill[‘工资’].median())  # 中位数填充

# 2. 文本型列(姓名):用固定值填充(比如“未知”)
df_fill[‘姓名’] = df_fill[‘姓名’].fillna(‘未知’)

print(“=“*30)
print(“填充缺失值后的表格:”)
print(df_fill)

现在,所有NaN已被替换:年龄列使用平均值填充,工资列采用更稳健的中位数填充,姓名列则标记为“未知”。此方法在解决数据缺失问题的同时,最大程度保留了数据规模。

操作要点:

  • 数值型数据(如年龄、工资、分数):优先考虑中位数填充,其对异常值不敏感。若使用平均值,极端值可能拉高整体水平,引入偏差。
  • 文本型数据(如姓名、城市):使用固定占位符填充,例如“未知”、“待补充”。
  • 当某列缺失值占比超过50%时,该列信息价值已严重受损。此时需评估是否采用复杂填充策略,或考虑直接舍弃该列。

三、重复值处理:检测与清除

重复值指在所有列上内容完全一致的行(如示例中的两个“张三”记录)。它们会导致统计结果失真,必须清理。处理流程同样是先检测,后清除。

1. 检测重复值

print(“=“*30)
print(“是否有重复行(True=重复):”)
print(df.duplicated())  # 每行判断是否为重复行(第一次出现的行算不重复)

# 统计重复行数量
print(“=“*30)
print(“重复行数量:”)
print(df.duplicated().sum())

运行代码,系统会标识出第3行(索引3)为重复行,并显示总的重复数量为1。

2. 删除重复值

使用drop_duplicates()方法可一键清除所有重复项。你可以选择使用inplace=True参数直接修改原DataFrame,或将结果赋值给新变量。

# 复制填充后的表格(继续处理重复值)
df_clean = df_fill.copy()

# 删除重复行(默认保留第一次出现的行)
df_clean.drop_duplicates(inplace=True)

print(“=“*30)
print(“去重后的最终干净表格:”)
print(df_clean)

至此,多余的“张三”行已被移除。我们获得了一份既无缺失值也无重复值的洁净数据表,为后续分析奠定了可靠基础。

四、核心函数速查表

五、总结

本文系统讲解了Pandas数据清洗的两大核心操作:处理缺失值遵循“先检测,后处理(删除或填充)”的流程;处理重复值则是“一键检测,一键删除”。请务必跟随代码逐步操作,以形成牢固的操作记忆。

洁净的数据是任何深度分析的基石。缺失值与重复值处理是数据预处理中最高频的操作之一。建议反复练习本文的代码示例,直至熟练掌握。在接下来的教程中,我们将深入Pandas的进阶功能,探索数据筛选、分组与聚合,你会发现其效率远超手动操作。


这就是Pandas 入门三:数据清洗必学!缺失值/重复值处理,一步到位不踩坑的全部内容了,希望以上内容对小伙伴们有所帮助,更多详情可以关注我们的菜鸟游戏和软件相关专区,更多攻略和教程等你发现!

热搜     |     排行     |     热点     |     话题     |     标签

手机版 | 电脑版 | 客户端

湘ICP备2022003375号-1

本站所有软件,来自于互联网或网友上传,版权属原著所有,如有需要请购买正版。如有侵权,敬请来信联系我们,cn486com@outlook.com 我们立刻删除。