Python Pandas数据清洗与处理中缺失值与异常值该怎么处理

来源:AI大模型作者:沙月恵奈‌头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python Pandas数据清洗与处理中缺失值与异常值该怎么处理》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python Pandas数据清洗与处理中缺失值与异常值该怎么处理》有用,将其分享出去将是对创作者最好的鼓励。

在使用Python进行数据分析时,Pandas是最核心的数据处理库之一,面对原始数据中常见的缺失值和异常值问题,掌握对应的处理方法能有效提升数据质量,为后续分析工作打好基础。

Python Pandas数据清洗与处理中缺失值与异常值该怎么处理

Pandas处理缺失值的方法

1. 判断缺失值

首先需要定位数据中的缺失值,Pandas提供了isnull()notnull()方法来完成这个操作,返回的结果是布尔型数据,True代表对应位置是缺失值。

import pandas as pd
import numpy as np

# 创建包含缺失值的测试数据
data = {
    "name": ["张三", "李四", "王五", "赵六"],
    "age": [20, np.nan, 25, 22],
    "score": [88, 92, np.nan, 85]
}
df = pd.DataFrame(data)

# 判断整个DataFrame的缺失值
print("缺失值判断结果:")
print(df.isnull())

# 统计每一列的缺失值数量
print("每列缺失值数量:")
print(df.isnull().sum())

2. 删除缺失值

当缺失值占比较小,或者缺失值所在的行/列对分析没有太大影响时,可以选择直接删除缺失值,使用dropna()方法实现。

# 删除包含任意缺失值的行(默认行为)
df_drop_row = df.dropna()
print("删除含缺失值的行后:")
print(df_drop_row)

# 删除全部为缺失值的行
df_drop_all = df.dropna(how="all")

# 删除缺失值占比超过阈值的列,thresh参数表示非空值的最小数量
df_drop_col = df.dropna(axis=1, thresh=3)
print("保留至少3个非空值的列后:")
print(df_drop_col)

3. 填充缺失值

更多时候我们需要保留数据量,选择用合适的值填充缺失值,fillna()方法支持多种填充策略。

# 用固定值填充缺失值
df_fill_const = df.fillna(0)
print("用0填充缺失值后:")
print(df_fill_const)

# 用前一行的值填充(前向填充)
df_fill_ffill = df.fillna(method="ffill")
print("前向填充后:")
print(df_fill_ffill)

# 用同列的平均值填充数值型缺失值
df["age"] = df["age"].fillna(df["age"].mean())
df["score"] = df["score"].fillna(df["score"].mean())
print("用平均值填充数值列后:")
print(df)

Pandas处理异常值的方法

1. 识别异常值

异常值是指明显偏离整体数据分布的数值,常用的识别方法包括3σ原则和箱线图法。

3σ原则识别

假设数据服从正态分布,99.7%的数值会落在均值加减3倍标准差的范围内,超出这个范围的就是异常值。

# 生成正态分布测试数据
test_data = pd.DataFrame({
    "value": np.random.normal(loc=50, scale=10, size=100).tolist() + [120, 130, -20]
})

# 计算均值和标准差
mean_val = test_data["value"].mean()
std_val = test_data["value"].std()

# 筛选异常值
outliers_3sigma = test_data[(test_data["value"] < mean_val - 3*std_val) | (test_data["value"] > mean_val + 3*std_val)]
print("3σ原则识别出的异常值:")
print(outliers_3sigma)

箱线图法识别

箱线图通过四分位数来定义异常值,小于Q1-1.5*IQR或者大于Q3+1.5*IQR的数值为异常值,IQR是四分位距,即Q3减去Q1。

# 计算四分位数
q1 = test_data["value"].quantile(0.25)
q3 = test_data["value"].quantile(0.75)
iqr = q3 - q1

# 筛选异常值
outliers_box = test_data[(test_data["value"] < q1 - 1.5*iqr) | (test_data["value"] > q3 + 1.5*iqr)]
print("箱线图法识别出的异常值:")
print(outliers_box)

2. 处理异常值

识别到异常值后,可以根据业务场景选择删除或者替换异常值。

# 删除异常值行
df_no_outliers = test_data[(test_data["value"] >= q1 - 1.5*iqr) & (test_data["value"] <= q3 + 1.5*iqr)]
print("删除异常值后的数据量:", len(df_no_outliers))

# 用边界值替换异常值(盖帽法)
test_data.loc[test_data["value"] < q1 - 1.5*iqr, "value"] = q1 - 1.5*iqr
test_data.loc[test_data["value"] > q3 + 1.5*iqr, "value"] = q3 + 1.5*iqr
print("盖帽法处理异常值后的数据:")
print(test_data.describe())

处理方案选择建议

在实际项目中,选择缺失值和异常值的处理方案需要结合数据特点和分析目标:

  • 缺失值占比小于5%且对分析影响小,优先选择删除缺失值
  • 数值型列的缺失值优先用均值、中位数填充,类别型列优先用众数填充
  • 异常值如果明显是录入错误,可以直接删除或修正
  • 如果数据量较小,尽量用填充、盖帽法等方式保留数据,避免删除导致样本不足

PythonPandas数据清洗缺失值处理异常值处理修改时间:2026-06-18 15:27:57

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。