资讯详情

Data-Science-For-Beginners 实战:用 pandas 数据清洗技术评估并修复表单数据质量问题

📅 2026/9/10 11:41:27 | 华诺云谱 👁 阅读
Data-Science-For-Beginners 实战:用 pandas 数据清洗技术评估并修复表单数据质量问题
Data-Science-For-Beginners 实战用 pandas 数据清洗技术评估并修复表单数据质量问题【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners本篇技术指南围绕 Data-Science-For-Beginners 仓库中「数据准备Data Preparation」一课的课后任务展开客户用一份极简 HTML 表单收集了 10 条客户记录但其中混入了大小写不一致、月份缩写、州名缩写与全称混用、缺失值等典型“脏数据”导致基于value_counts()绘制的可视化出现错误分类。读完本文你将掌握用 pandas 探查数据、定位脏数据模式、制定清洗策略并最终反推表单设计缺陷、给出可落地的表单改造建议的完整实战流程。任务背景一份“脏”表单与其数据集本任务是「Working with Data」第 08 课 数据准备课程 README 的课后作业。客户正在测试一个小型表单来收集客户基本信息他们把收集结果交给了我们要求验证数据质量并针对表单本身给出改进建议。表单结构打开 index.html 可以看到表单共 3 个字段全部使用自由文本输入仅宠物字段是下拉框h1Please Fill out the Form (* required)/h1 *labelBirth Month/label input typetext br labelState/label input typetext br label forpetsDogs or Cats?/label select namepets idpets option valuedogsDog/option option valuecatsCats/option /select br buttonSubmit/button /body从源码可以看出两个隐患Birth Month与State都是typetext的自由输入框Birth Month甚至标记了* required却没有实际启用 HTML 的required属性。自由文本输入意味着用户可以用任意格式填写这正是数据质量问题的根源。数据集10 条客户记录data/form.csv 保存了表单提交的 10 条记录共 3 列birth_month,state,pet January,,Cats JAN,CA,Cats Sept,Hawaii,Dog january,AK,Dog July,RI,Cats September,California,Cats April,CA,Dog January,California,Cats November,FL,Dog December,Florida,Cats评估目标根据 任务文档 与 任务 Notebook 的说明任务要求我们打开index.html在浏览器中查看表单检查form.csv中来自表单的 CSV 记录及基础可视化客户指出部分可视化看起来不正确但不知道如何解决使用本课的技术对表单提出建议使其能够收集准确、一致的信息。快速上手加载数据并复现“错误的可视化”任务 Notebook 的第一步是安装并引入依赖、加载数据import pandas as pd import matplotlib.pyplot as plt # 加载数据集 path data/form.csv # 原 notebook 中为 ../../data/form.csv form_df pd.read_csv(path) print(form_df)输出如下与 assignment.ipynb 第 4 个代码单元格的记录一致birth_month state pet 0 January NaN Cats 1 JAN CA Cats 2 Sept Hawaii Dog 3 january AK Dog 4 July RI Cats 5 September California Cats 6 April CA Dog 7 January California Cats 8 November FL Dog 9 December Florida Cats紧接着任务 Notebook 用value_counts()分别对state与birth_month绘制了条形图form_df[state].value_counts().plot(kindbar) plt.show() form_df[birth_month].value_counts().plot(kindbar) plt.show()这正是“看起来不正确”的可视化。因为value_counts()是按字符串原文分类计数的所以它会把CA和California当作两个不同的州、把JAN、January、january当作三个不同的月份分别计数导致条形图出现大量“虚假分类”完全无法反映真实的数据分布。问题诊断三类典型数据质量问题对照课程 README 中归纳的清洗目标这份数据同时命中了格式化Formatting、缺失数据Missing Data两类问题。1. 格式不一致月份列birth_month列的 10 条记录里同一月份出现了多种写法实际月份出现的写法记录数JanuaryJanuary、JAN、january4SeptemberSept、September2JulyJuly1AprilApril1NovemberNovember1DecemberDecember1问题具体表现为大小写不统一Januaryvsjanuary缩写与全称混用JAN三字母缩写、Sept截断式缩写vsJanuary等全称。这些写法在视觉和字符串层面都不相等导致value_counts()将它们拆分为 9 个独立类别实际只有 6 个月份。2. 格式不一致州名列state列同样是缩写与全称混用实际州出现的写法记录数CaliforniaCA、California3FloridaFL、Florida2HawaiiHawaii1AlaskaAK1Rhode IslandRI13. 缺失数据州名缺失第 0 行记录的state为NaNNot a Number。在 pandas 中缺失值以NaNIEEE 浮点规范中的特殊值用于表示缺失的浮点值或 Python 的None表示课程 notebook.ipynb 对此有详细讲解。这份 CSV 中缺失的state被 pandas 解析为NaN属于典型的缺失数据。对比之下pet列只有Cats与Dog两种取值来自下拉框完全一致——这从侧面印证了自由文本输入是数据脏乱的主因而下拉框天然约束了取值范围。数据清洗实战用 pandas 还原真实分布课程 notebook.ipynb 与 README 提供的核心清洗武器包括探查head/tail/info、缺失值处理isnull/notnull/dropna/fillna、去重duplicated/drop_duplicates。下面我们用这些技术清洗表单数据。第一步探查缺失情况form_df.isnull().sum()输出表明只有state列有 1 个缺失值。isnull()返回布尔掩码直接对掩码sum()即可统计各列缺失总数——这是 notebook 中“example3.isnull().sum()”模式的直接应用。第二步标准化月份列把大小写统一并将JAN、Sept等缩写映射到规范全称month_map {JAN: January, Sept: September} form_df[birth_month] ( form_df[birth_month] .str.title() # JAN - Jan, january - January .replace(month_map) # Jan - January, Sept - September )清洗后birth_month的分布为January 4、September 2、July 1、April 1、November 1、December 1条形图恢复真实分布。第三步标准化州名列建立“缩写 → 全称”映射统一州名state_map { CA: California, AK: Alaska, RI: Rhode Island, FL: Florida, } form_df[state] form_df[state].replace(state_map)清洗后California 3、Florida 2、Hawaii 1、Alaska 1、Rhode Island 1、缺失 1。第四步处理缺失值对state的缺失值有两种选择删除dropna()数据集很小时会损失样本但实现最简单填充fillna()例如填充为Unknown或众数保留样本但引入人为取值。form_df.dropna() # 删除含缺失值的行 form_df[state].fillna(Unknown) # 或用占位值填充选择依据课程反复强调具体策略应由数据的具体情况决定。对本任务而言更推荐在修复表单后重新收集数据避免“事后补值”。第五步检查重复记录课程还强调重复数据会改变分析结果。可验证本数据集是否存在重复提交form_df.duplicated() # 逐行布尔掩码 form_df.drop_duplicates() # 返回去重副本根因修复表单设计建议数据清洗治标表单改造治本。对照 index.html 源码针对已诊断出的问题可给出以下可落地的建议建议一用下拉框/单选控件替代自由文本输入Birth Month与State字段应仿照pet字段select下拉框改为受限选择月份提供 12 个选项的下拉框January~December彻底杜绝缩写与大小写问题州名提供 50 个州全称或统一的两位缩写的下拉框杜绝CA/California混用。这是从数据源头保证一致性的最直接手段也正是课程 README 中“格式化问题通常取决于使用者”的实践注解——把格式化决策前置到表单层。建议二启用必填校验Birth Month虽标注了* required但 HTML 源码并未添加required属性。应补上labelBirth Month/label select namebirth_month required option value-- Select --/option ... /select labelState/label select namestate required option value-- Select --/option ... /select同时可在前端用pattern校验、后端做兜底校验从源头减少缺失数据本例state的NaN即因未填而提交。建议三统一存储与展示格式即使保留自由输入也应在提交时做规范化如str.title() 缩写映射或在收集端提供示例占位符确保入库即标准格式。评估标准与验收任务文档给出了三档评价标准可用于自查交付质量优秀Exemplary达标Adequate待改进Needs Improvement完整定位三类数据问题给出清洗后的正确分布并对表单提出可直接落地的改造下拉框、必填校验等能识别主要问题并提出部分建议但清洗或建议不完整仅描述现象未定位根因未给出可执行的表单改进方案仓库参考资源任务文档英文原版任务说明与评价标准任务 Notebook数据加载与可视化复现课程 README清洗重要性、格式化、去重、缺失值理论课程 Notebookinfo/head/tail、isnull/notnull/dropna/fillna、duplicated/drop_duplicates的完整代码示例表单页面 与 表单数据任务数据源【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。