✅ 今日目标

  • 熟练处理数据中的缺失值(NaN、None)
  • 学会识别和处理异常值(outliers)
  • 掌握常用的处理方法:填充、删除、替换、标准差法、箱型图法等
  • 为后续机器学习建模打好数据清洗基础

📚 一、缺失值处理(Missing Data)

1. 检查缺失值

df.isnull().sum()  # 每列缺失值数量
df.info()          # 查看字段类型和非空计数

2. 删除缺失值

df.dropna()              # 删除包含缺失值的行
df.dropna(axis=1)        # 删除包含缺失值的列
df.dropna(how="all")     # 删除整行全为空

3. 填充缺失值(推荐)

df["成绩"].fillna(df["成绩"].mean(), inplace=True)      # 均值填充
df["成绩"].fillna(method="ffill", inplace=True)          # 前向填充
df["成绩"].fillna(method="bfill", inplace=True)          # 后向填充

4. 替换无效数据为 NaN

import numpy as np
df["成绩"].replace("缺考", np.nan, inplace=True)

⚠️ 二、异常值检测与处理

1. 基于统计分布检测异常值(Z-Score)

score_mean = df["成绩"].mean()
score_std = df["成绩"].std()df["Z值"] = (df["成绩"] - score_mean) / score_std# 筛选 Z 分数绝对值大于 3 的异常点
outliers = df[abs(df["Z值"]) > 3]
print(outliers)

2. 使用箱型图(IQR)识别异常值

Q1 = df["成绩"].quantile(0.25)
Q3 = df["成绩"].quantile(0.75)
IQR = Q3 - Q1lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR# 判断异常值
outliers_iqr = df[(df["成绩"] < lower_bound) | (df["成绩"] > upper_bound)]
print(outliers_iqr)

3. 替换或删除异常值

# 方法一:直接删除
df_cleaned = df[(df["成绩"] >= lower_bound) & (df["成绩"] <= upper_bound)]# 方法二:用边界值替代异常值
df["成绩"] = df["成绩"].clip(lower_bound, upper_bound)

🧪 今日练习建议

  1. 对学生数据进行缺失值统计

  2. 使用多种方法填充缺失成绩

  3. 使用标准差(Z-Score)和 IQR 方法检测异常值

  4. 对异常值进行合理处理(删除 / 替换)

  5. 输出处理前后的对比数据统计信息

    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    import os# 设置中文支持(根据系统配置选择)
    plt.rcParams['font.family'] = 'Arial Unicode MS'  # macOS
    # plt.rcParams['font.sans-serif'] = ['SimHei']     # Windows
    plt.rcParams['axes.unicode_minus'] = False# 加载数据
    data_path = "data/students_dirty.csv"
    if not os.path.exists(data_path):raise FileNotFoundError("❌ 缺少数据文件:students_dirty.csv,请确保数据文件存在于 data 目录下。")df = pd.read_csv(data_path, encoding="utf-8", header=0)
    print("✅ 原始数据预览:")
    print(df)# ------------------ 一、缺失值处理 ------------------print("\n🔍 缺失值统计:")
    print(df.isnull().sum())# 示例:将“缺考”字符串替换为 NaN
    df.replace({"缺考": np.nan}, inplace=True)
    df["成绩"] = pd.to_numeric(df["成绩"], errors="coerce")# 填充缺失值(用平均数填充)
    mean_score = df["成绩"].mean()
    df.fillna({"成绩": mean_score}, inplace=True)
    print(f"\n✅ 缺失值已填充为平均数:{mean_score:.2f}")# ------------------ 二、异常值检测(Z-Score) ------------------mean = df["成绩"].mean()
    std = df["成绩"].std()
    df["Z值"] = (df["成绩"] - mean) / std# 绝对值大于 3 视为异常
    outliers_z = df[abs(df["Z值"]) > 3]
    print(f"\n📈 Z-Score 异常值数量:{len(outliers_z)}")
    print(outliers_z)# ------------------ 三、异常值检测(IQR) ------------------Q1 = df["成绩"].quantile(0.25)
    Q3 = df["成绩"].quantile(0.75)
    IQR = Q3 - Q1
    lower = Q1 - 1.5 * IQR
    upper = Q3 + 1.5 * IQRoutliers_iqr = df[(df["成绩"] < lower) | (df["成绩"] > upper)]
    print(f"\n📊 IQR 异常值数量:{len(outliers_iqr)}")
    print(outliers_iqr)# ------------------ 四、异常值处理 ------------------# 方式一:删除异常值
    df_filtered = df[(df["成绩"] >= lower) & (df["成绩"] <= upper)]# 方式二:clip 限制在边界范围内
    df_clipped = df.copy()
    df_clipped["成绩"] = df_clipped["成绩"].clip(lower, upper)# ------------------ 五、可视化箱型图 ------------------sns.boxplot(df["成绩"])
    plt.title("成绩箱型图")
    plt.tight_layout()
    os.makedirs("charts", exist_ok=True)
    plt.savefig("charts/成绩箱型图_异常值检测.png")
    plt.close()
    print("📊 箱型图已保存至 charts/成绩箱型图_异常值检测.png")# ------------------ 六、保存结果 ------------------df_filtered.to_csv("data/students_no_outliers.csv", index=False)
    df_clipped.to_csv("data/students_clipped.csv", index=False)print("\n✅ 异常值处理后的数据已保存:")
    print("✔️ 删除异常值版本:data/students_no_outliers.csv")
    print("✔️ 边界裁剪版本:data/students_clipped.csv")
    

    成绩箱型图_异常值检测:
    在这里插入图片描述

    将异常值裁剪为上下限后的数据:
    在这里插入图片描述

    删除异常值后的数据:
    在这里插入图片描述


🧾 今日总结

  • 缺失值和异常值是数据清洗中的核心问题
  • 多种处理方法需视场景选择,避免信息损失或过度拟合
  • 数据分布图与 Z 分数 / IQR 辅助判断效果最佳
  • 清洗结果直接影响后续的建模质量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86951.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86951.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86951.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概述-1-数据库的相关概念

数据库的相关概念 用户通过SQL操作数据库管理系统&#xff0c;再通过数据库管理系统操作数据库以及数据库中的数据。 数据库 数据库是存储数据的仓库, 数据是有组织的进行存储, DataBase简称&#xff08;DB&#xff09; 数据库管理系统 操纵和管理数据库的大型软件, DataB…

可视化大屏展示

可视化大屏是一种将大量数据进行整合、分析&#xff0c;并以直观、形象的可视化方式展示在大屏幕上的信息展示系统。主要组成部分分为2个&#xff1a;硬件设备、软件系统。 一、大屏价值 1、数据可视化&#xff1a;将复杂的数据转化为直观的图形、图表和地图等&#xff0c;使数…

服务器被入侵的常见迹象有哪些?

&#x1f6a8; 服务器被入侵的常见迹象 &#x1f7e2; 一、系统和资源异常 CPU、内存或网络流量异常飙高 即使没有业务负载&#xff0c;资源长期占满。 磁盘空间突然被写满 可疑大文件或日志暴涨。 系统负载显著升高 uptime、top 显示 load average 异常。 &#x1f7e1;…

日本生活:日语语言学校-日语作文-沟通无国界(5)-题目:我的一天

日本生活&#xff1a;日语语言学校-日语作文-沟通无国界&#xff08;5&#xff09;-题目&#xff1a;我的一天 1-前言2-作文原稿3-作文日语和译本&#xff08;1&#xff09;日文原文&#xff08;2&#xff09;对应中文&#xff08;3&#xff09;对应英文 4-老师评语5-自我感想&…

前端领域的技术热点与深度解析

&#x1f525; 一、框架革新&#xff1a;React、Vue、Svelte 的进化方向 React 19 实验版 Server Components 深化&#xff1a;支持流式渲染与异步状态管理&#xff0c;SSR 性能提升40%。 并发模式优化&#xff1a;减少渲染阻塞&#xff0c;复杂交互场景延迟降低35%。 Vue 3…

【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)

注意&#xff1a;考虑到热更新的内容比较多&#xff0c;我将热更新的内容分开&#xff0c;并全部整合放在【unity游戏开发——网络】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、联网游戏类型划分二、核心通信协议对比三、开发选择指南专栏推荐完结 …

Java-60 深入浅出 分布式服务Paxos 算法优化 如何保证Paxos算法的活性

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月16日更新到&#xff1a; AI炼丹日志-29 - 字节…

一阶线性双曲型偏微分方程组的特征值与通解分析

问题3 求系统 U u + A U x = 0 U_u + A U_x = 0 Uu​+AUx​=0 的特征并写出通解,其中矩阵 A A A 如下: A 1 = ( 3 2 1 0 2 1 0 0 1 ) , A 2 = ( 3 2 1 0 2 1 0 0 − 1 ) , A_1 = \begin{pmatrix} 3 & 2 & 1 \\ 0 & 2 & 1 \\ 0 & 0 & 1 \end{pmatr…

解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练

景联文科技持续聚焦AI数据需求前沿&#xff0c;全新发布包含中文题库数据集、英文题库数据集、算法代码数据库、英文语料、中文语料、垂直领域数据、小语种数据在内的七大高质量数据集产品系列。 此次发布的数据集覆盖广泛的应用场景&#xff0c;通过严格的清洗与结构化处理&am…

OSPF(开放最短路径优先)

一、ospf简介 OSPF是基于链路状态的内部网关协议&#xff0c;与距离矢量协议不同&#xff0c;链路状态协议通告的是链路状态而不是路由表。OSPF是用于自治系统&#xff08;AS&#xff09;内部的路由决策,特点有&#xff0c;收敛速度快&#xff0c;安全性好&#xff0c;避免环路…

全面拥抱vue3

Vue 3 性能全面解析&#xff1a;为何性能飞跃提升 Vue 3 在性能方面实现了质的飞跃&#xff0c;相比 Vue 2 在多个维度都有显著提升。以下是 Vue 3 性能优化的全面解析&#xff1a; 一、核心架构优化 1. 响应式系统重写&#xff08;Proxy 替代 defineProperty&#xff09; …

C#最佳实践:考虑为类重写ToString()方法

C#最佳实践:考虑为类重写ToString()方法 在 C# 编程的日常开发中,ToString()方法是一个既基础又容易被忽视的重要成员。它是System.Object类的虚方法,所有类都继承自System.Object,这意味着每个类都拥有ToString()方法。然而,默认的ToString()方法往往无法满足实际需求,…

从0开始学习计算机视觉--Day05--优化

除了得到最小的W之外&#xff0c;如何节省这个探索最优W的过程&#xff0c;也是很重要的一点。假如把这个过程比作从山上的顶点开始下山&#xff0c;把图中必定游玩的经典比作最优权重&#xff0c;那么节省的过程&#xff0c;就是找到下山的最短路径的过程。而在下山的过程中&a…

OpenCV计算机视觉实战(14)——直方图均衡化

OpenCV计算机视觉实战&#xff08;14&#xff09;——直方图均衡化 0. 前言1. CLAHE 自适应均衡1.1 应用场景1.2 实现过程 2. 直方图反向投影2.1 应用场景2.2 实现过程 3. 基于颜色的目标追踪小结系列链接 0. 前言 在图像处理与计算机视觉领域&#xff0c;直方图技术是最直观且…

基于uniapp的老年皮肤健康管理微信小程序平台(源码+论文+部署+安装+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 近年来&#xff0c;我国人口老龄化进程不断加快&#xff0c;据国家统计局数据显示&#…

MySQL(106)如何设计分片键?

设计分片键&#xff08;Sharding Key&#xff09;是数据库分片的核心&#xff0c;它决定了将数据分配到不同分片的方式。一个好的分片键应该能够均衡地分布数据&#xff0c;避免热点问题&#xff0c;提高查询性能。下面将详细介绍如何设计分片键&#xff0c;并结合代码进行说明…

汽车一键启动升级手机控车

汽车一键启动升级手机控车实现手机远程启动&#xff0c;不改变原车任何功能且全部免接线。升级后原车遥控器能在有效范围内启动车辆。移动管家手机控车一键启动系统用手机远程控制&#xff0c;完美兼容原车遥控器。支持长安、别克、宝马、奥迪等众多系列车型&#xff0c;市场99…

【开源项目】「安卓原生3D开源渲染引擎」:Sceneform‑EQR

「安卓原生3D开源渲染引擎」&#xff1a;Sceneform‑EQR 渲染引擎 “那一夜凌晨3点&#xff0c;第一次提交 PR 的手在抖……”——我深刻体会这种忐忑与激动。 仓库地址&#xff1a;(https://github.com/eqgis/Sceneform-EQR)。 一、前言&#xff1a;开源对我意味着什么 DIY 的…

建造者模式 - Flutter中的乐高大师,优雅组装复杂UI组件!

痛点场景&#xff1a;复杂的对话框配置 假设你需要创建一个多功能对话框&#xff1a; CustomDialog(title: 警告,content: 确定要删除吗&#xff1f;,titleStyle: TextStyle(fontSize: 20, color: Colors.red),contentStyle: TextStyle(fontSize: 16),backgroundColor: Color…

基于Java+Spring Boot的大学校园生活信息平台

源码编号&#xff1a;S559 源码名称&#xff1a;基于Spring Boot的大学校园生活信息平台 用户类型&#xff1a;双角色&#xff0c;用户、管理员 数据库表数量&#xff1a;17 张表 主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 运行环境&#xff1a;Wind…