当前位置:首页>python>Python 数据清洗:搞定缺失值与重复值实战

Python 数据清洗:搞定缺失值与重复值实战

  • 2026-10-11 08:21:37
Python 数据清洗:搞定缺失值与重复值实战

🧹Python 数据清洗实战:搞定缺失值与重复值,让数据干干净净!

在数据分析的世界里,脏数据就像厨房里的油污,会让后续的分析、建模全变味。而 Pandas 作为 Python 数据分析的 “瑞士军刀”,提供了一套超实用的工具,帮你快速搞定数据清洗的两大核心难题 ——缺失值和重复值。

今天这篇干货,带你从 查看缺失值 → 处理缺失值 → 排查删除重复值 

🔍 第一步:先摸清家底——查看缺失值

在动手处理之前,我们得先搞清楚:数据里到底有多少缺失值?它们藏在哪些角落?

Pandas 里的 isna() 就是我们的「探照灯」,搭配不同用法,能从多维度快速定位缺失值。

下面我们构造一份带缺失值的示例数据,全程实操演示:

python                  import pandas as pd                  import numpy as np                  # 构造示例数据                  data = {                  "姓名": ["张三", "李四", "王五", "赵六", "孙七"],                  "年龄": [20, np.nan, 22, np.nan, 24],                  "分数": [88,92, np.nan, 85, 90],                  "班级": ["一班", "二班", "三班", "二班", np.nan]                  }                  df = pd.DataFrame(data)                  print(df)

运行结果:

text                  姓名年龄分数班级                  0张三20.088.0一班                  1李四NaN92.0二班                  2王五22.0NaN三班                  3赵六NaN85.0二班                  4孙七24.090.0NaN

✨ 1. 按单元格查看:df.isna()

最基础用法,逐个单元格检测,缺失值=True,非缺失值=False,相当于给数据拍了一张缺失值X光片。

python                  # 按单元格查看缺失值                  print(df.isna())

运行结果:

text                  姓名年龄分数班级                  0FalseFalseFalseFalse                  1FalseTrueFalseFalse                  2FalseFalseTrueFalse                  3FalseTrueFalseFalse                  4FalseFalseFalseTrue

✨ 2. 按列查看:df.isna().sum()

数据分析最常用!按列统计每一列缺失值数量,一眼看出哪一列缺失最严重。

python                  # 按列统计缺失值数量                  print(df.isna().sum())

运行结果:

text                  姓名0                  年龄2                  分数1                  班级1                  dtype: int64

👉 结果一目了然:年龄列2个缺失,分数、班级各1个,姓名列无缺失。

✨ 3. 按行查看:df.isna().sum(1)

统计每一行有几个缺失值,sum(1) 代表按行维度求和。

python                  # 按行统计缺失值数量                  print(df.isna().sum(1))

运行结果:

text                  00                  11                  21                  31                  41                  dtype: int64

👉 除第0行外,其余每行都有1个缺失值。

✨ 4. 只看有缺失值的列

数据列很多时,过滤掉无缺失的列,只保留存在缺失的列:

python                  # 筛选出有缺失值的列                  print(df.loc[:, df.isna().any()])

✨ 5. 只看有缺失值的行

单独筛选出含缺失值的问题行,方便人工核查:

python                  # 筛选出有缺失值的行                  print(df.loc[df.isna().any(1), :])

✨ 6. 统计全局缺失值总数

一键算出整个数据表一共有多少个缺失值:

python                  # 统计缺失值总个数                  print(df.isna().sum().sum())

运行结果: 4

🛠️ 第二步:缺失值4种常用处理方式

摸清缺失值分布后,就进入核心清洗环节。日常数据分析,掌握这4种方法完全够用。

1. 删除缺失值 dropna()

适用场景:缺失值占比极低、删除后不影响整体分析。

python                  # 删除任意包含缺失值的行                  df.dropna()                  # 只删除整行全部为空的行                  df.dropna(how="all")                  # 删除包含缺失值的列                  df.dropna(axis=1)                  # 保留规则:一行至少有3个非空值才保留                  df.dropna(thresh=3)

2. 固定值填充 fillna()

适用场景:类别型数据,统一填充默认标识。

python                  # 全部缺失值统一填充为0                  df.fillna(0)                  # 指定单列单独填充                  df["年龄"].fillna(18)                  df["班级"].fillna("未知班级")

3. 统计值填充(均值/中位数/众数)

适用场景:年龄、分数等数值型字段。

python                  # 均值填充                  df["年龄"].fillna(df["年龄"].mean())                  # 中位数填充(抗异常值,更稳健)                  df["年龄"].fillna(df["年龄"].median())                  # 众数填充(适合分类字段)                  df["班级"].fillna(df["班级"].mode()[0])

4. 前后值填充

适用场景:时间序列、有先后顺序的有序数据。

python                  # 前向填充:用上一行值填充                  df.fillna(method="ffill")                  # 后向填充:用下一行值填充                  df.fillna(method="bfill")

🔎 第三步:重复值查看与处理

搞定缺失值,紧接着清理重复值。重复数据会虚增样本、拉低分析准确度,必须排查去重。

1. 查看重复行

python                  # 判断每行是否为重复行(True=重复)                  df.duplicated()                  # 统计一共有多少重复行                  df.duplicated().sum()                  # 只查看重复的行(不含第一条原始数据)                  df[df.duplicated()]                  # 查看所有重复行(包含原始行+重复行)                  df[df.duplicated(keep=False)]

2. 删除重复值 drop_duplicates()

python                  # 整行完全一致才去重,默认保留第一条                  df.drop_duplicates()                  # 指定字段去重:只按姓名、年龄判断重复                  df.drop_duplicates(subset=["姓名", "年龄"])                  # 保留最后一条重复数据                  df.drop_duplicates(keep="last")                  # 原地直接去重,不生成新数据表                  df.drop_duplicates(inplace=True)

✅ 通用万能:一键数据清洗模板

直接复制就能用,适配所有CSV/Excel数据,缺失值+重复值一次性清洗到位:

python                  import pandas as pd                  import numpy as np                  # 读取本地数据                  df = pd.read_csv("你的数据.csv")                  # df = pd.read_excel("你的数据.xlsx")                  # 1. 快速诊断数据脏况                  print("每列缺失值统计:\n", df.isna().sum())                  print("重复行总数:", df.duplicated().sum())                  # 2. 批量缺失值填充                  df["年龄"].fillna(df["年龄"].mean(), inplace=True)                  df["分数"].fillna(df["分数"].mean(), inplace=True)                  df["班级"].fillna("未知", inplace=True)                  # 3. 删除重复行                  df.drop_duplicates(inplace=True)                  # 4. 输出清洗后数据                  print("\n✅ 清洗完成后数据:")                  print(df)

最新文章

随机文章