数据清洗工程实践:基于 pandas 的八类典型问题与处理规范

发布时间:2026/10/23 20:15:25

数据清洗工程实践:基于 pandas 的八类典型问题与处理规范 在数据分析与机器学习项目中数据清洗通常占据一半以上的工作量。本文基于一次真实成绩数据的清洗经历数千条教务系统导出记录归纳八类高频脏数据问题及其标准处理方式并给出可复用的处理规范。〇、两条前置原则原始数据只读。原始文件置于独立目录如raw/并保持只读所有处理结果输出至processed/。任何情况下不直接修改原始文件。处理过程脚本化。禁止使用 Excel 手工修改数据。所有清洗逻辑以脚本实现保证可重复执行、可追溯。手工修改的数据在事后无法还原修改内容。import pandas as pd import numpy as np df pd.read_csv(raw/scores.csv) df_backup df.copy() # 内存中保留原始副本一、清洗前的数据体检开始处理前先用以下命令建立对数据的整体认识df.shape # 行列规模 df.dtypes # 各列类型数值列被读为字符串是常见问题 df.head(10) # 直接观察数据内容 df.isnull().sum() # 各列缺失数量 df.describe(includeall) # 数值列分布与文本列取值个数其中dtypes需重点检查若成绩列类型为object说明列内混入了非数值内容如缺考缓考此时直接计算统计量会报错或产生错误结果。二、八类典型问题与处理方法1. 缺失值先分析成因再决定策略missing_rate df.isnull().mean().sort_values(ascendingFalse) print(missing_rate[missing_rate 0])处理决策建议缺失率超过 60% 的列删除df.drop(columns[...])该列已不具备分析价值数值列少量缺失以中位数填充df[score].fillna(df[score].median())——中位数对极端值鲁棒优于均值类别列缺失填充为独立类别fillna(未知)。缺失本身可能携带信息不宜简单删除避免无差别使用dropna()整行删除会损失大量有效信息仅在其他方法均不适用时采用。2. 重复记录区分完全重复与业务重复df.duplicated().sum() # 完全重复的行 df df.drop_duplicates() # 业务层面的重复同一学生同一学期出现多条记录 df.duplicated(subset[学号, 学期]).sum() df df.drop_duplicates(subset[学号, 学期], keeplast)keep参数的取值取决于业务语义后录入覆盖先录入或相反。无法确认时应向数据提供方求证不应自行假设。3. 类型混杂数值列中混入文本df[score] pd.to_numeric(df[score], errorscoerce) # 无法转换的置为 NaN参数errorscoerce将无法解析的值统一转为 NaN随后纳入缺失值处理流程避免转换异常中断执行。4. 异常值以 IQR 准则识别以业务判断处置Q1 df[score].quantile(0.25) Q3 df[score].quantile(0.75) IQR Q3 - Q1 lower, upper Q1 - 1.5 * IQR, Q3 1.5 * IQR outliers df[(df[score] lower) | (df[score] upper)] print(f识别出 {len(outliers)} 个异常值)识别异常值不等于删除异常值。超出合理区间的取值如百分制下出现 150 分大概率为录入错误可修正或剔除但统计意义上的离群点可能是真实且重要的样本如欺诈检测场景中异常样本正是分析目标。处置前应逐条核实。5. 文本不规范同一实体的多种写法df[专业].value_counts() # 可能输出计算机科学与技术、计算机、计科、CS、计算机科学 ……标准化处理的一般顺序df[专业] df[专业].str.strip() # 去除首尾空格 df[专业] df[专业].str.replace( , ) # 去除全角空格 mapping {计科: 计算机科学与技术, CS: 计算机科学与技术, ...} df[专业] df[专业].replace(mapping)首尾空格是高频隐患计算机与 计算机在分组统计中被视为不同取值。聚合结果出现疑似重复的类别时应首先检查空格问题。6. 日期格式统一df[日期] pd.to_datetime(df[日期], errorscoerce)pd.to_datetime可识别多数常见格式2024-01-01、2024/1/1、2024年1月1日等。转换完成后可便捷地提取时间特征df[日期].dt.year # 年 df[日期].dt.month # 月 df[日期].dt.dayofweek # 星期7. 类别编码区分有序与无序文本特征入模前必须编码编码方式取决于类别是否具有序关系# 有序类别如等级 ABCD映射为数值保留序关系 grade_map {A: 4, B: 3, C: 2, D: 1} df[等级编码] df[等级].map(grade_map) # 无序类别如专业one-hot 编码 df pd.get_dummies(df, columns[专业], prefix专业)不应对无序类别使用序号编码0, 1, 2, …这会向模型引入并不存在的序关系如计算机(2) 大于 机械(1)属于初学阶段的高频错误。8. 结果保存df.to_csv(processed/scores_clean.csv, indexFalse, encodingutf-8-sig)两点说明encodingutf-8-sig带 BOM 的 UTF-8 编码可保证中文 CSV 在 Excel 中正常显示普通 UTF-8 编码的 CSV 用 Excel 打开会出现乱码。中间结果规模较大时建议使用 Parquet 格式to_parquet()体积与读写速度较 CSV 有数量级优势且保留列类型信息。三、应当避免的做法做法问题在 Excel 中手工修改数据不可复现、不可追溯无差别dropna()损失大量有效样本缺失值一律填 00 是有效数值会污染统计量与模型发现异常值直接删除异常值可能正是重要信息清洗后不重新验证每轮清洗后应重新执行数据体检四、处理日志一项低成本高收益的习惯建议每次清洗完成后保留简要记录2024-XX-XX 清洗记录 - 原始 5231 行 → 去重后 5180 行剔除完全重复 51 条 - score 列12 条缺考转为 NaN以中位数 72 填充 - 专业列合并 7 个别名统一去除首尾空格 - 剔除异常值 3 条score 100经与数据提供方确认为录入错误该日志在项目复盘与求职面试中均有直接价值——处理过什么数据远不如遇到什么问题、如何解决、依据是什么具有说服力。五、小结数据清洗没有统一的固定流程但有稳定的方法论先体检、再分类处置、处置后验证、全程留痕。掌握本文的八类问题及其处理规范足以应对本科阶段绝大多数表格数据场景。下一篇讨论计算机视觉项目的技术选型问题传统图像处理方法与深度学习方法各自的适用范围及判断依据。
延伸阅读

更多相关文章

2026/10/22 22:10:21

基于RFC协议与Qt框架的跨平台C++客户端开发实践

在实际 C Qt 项目中,从零开始构建一个功能完整、架构清晰的客户端应用,是检验开发者工程能力的重要标尺。很多开发者熟悉 Qt 的控件和信号槽,但面对网络协议解析、跨平台适配、模块化架构设计等综合需求时,往往感到无从下手。本文…

2026/10/22 19:13:48

atomic chat量化居然比unsloth 更小更强

atomic chat量化居然比unsloth 更小更强 Atomic Chat 面向智能体的本地 AI 应用与推理引擎。本地运行开源权重大型语言模型 —— 隐私安全,完全在您的设备上离线运行。 repo:GitHub - AtomicBot-ai/Atomic-Chat: Local AI app and inference engine for agents. …

2026/10/23 0:24:02

游戏逆向分析实战:从内存扫描到FName算法解析

1. 从“王权与自由”到通用分析:理解游戏外挂逆向的核心路径 看到“王权与自由-c外挂逆向教程”这个标题,很多人的第一反应可能是想立刻找到某个特定游戏的内存地址,然后写个无敌或秒杀功能。但作为一个有十多年经验的从业者,我必…

2026/10/23 20:11:40

WPF原生控件仿Word富文本编辑器:FlowDocument与命令绑定

简介:面向希望基于 WPF 构建类 Word 文本编辑环境的 .NET 开发者,这套开源富文本编辑器示例提供可直接运行的解决方案与可复用核心组件,覆盖基础文本编辑、查找替换、HTML 源码查看、打印、纯文本导出、插入图片和表格等常见能力。压缩包共 2…

2026/10/23 20:11:40

C++引用详解:从底层原理到与指针的硬核对比

C里有一个特别有意思的现象:很多人学指针时觉得“不过如此”,但一遇到引用就开始犯迷糊。引用这个概念,表面上看就是“给变量起了个别名”,可一旦牵涉到函数参数、返回值、重载决议,甚至和指针放在一起对比&#xff0c…

2026/10/23 20:11:40

Java网页表格抓取实战:HttpClient+Jsoup导出CSV

简介:这份资料面向Java初学者和需要采集网页数据的开发者,演示在MyEclipse环境下抓取网页表格并整理为结构化数据的完整思路,涉及HttpClient、Jsoup等常用库的组合使用,适合作为数据挖掘前的数据获取练习或课程设计参考。压缩包共…

2026/10/23 20:01:39

xlsx课表转ics日历:Python脚本自动处理单双周与调休

简介:这份资源面向需要将Excel课表批量导入日历的学生与教育工作者,解决手动逐条录入课程、跨平台日程难以同步的问题。包内共4个文件,包含可执行程序、课表样例、JSON配置与说明文档,压缩包约9.8MB,其中exe负责核心转…

2026/10/23 20:01:39

Fork/Join并发框架:分治算法与工作窃取实战解析

1. 先搞清楚Fork/Join到底在解决什么问题1.1 分治思想:从“一个人干不完”说起Fork/Join这个名字,我最早在Java 7的并发工具包里见到时,第一反应是“名字起得真直白”——Fork就是分叉,Join就是合并。说白了,它就是两大…

2026/10/23 20:01:39

离散数学第二章关系全解析:从集合到等价与偏序

1. 离散数学第二章到底在讲什么1.1 从“集合”到“关系”:这一章的核心脉络离散数学第二章,绝大多数教材安排的都是关系。但很多人翻开书第一眼看到的却是“二元关系”“笛卡尔积”“自反闭包”这些词,直接就被劝退了。我当初学这一章的时候也…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑