Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

news2024/10/7 12:23:14

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

质量控制

质量控制(Quality Control, QC),主要关注于提高代码质量、确保数据准确性和程序稳定性。

数据质量

数据质量是指数据满足其预定用途所要求的准确性、完整性、一致性、及时性和有效性的程度。良好的数据质量是数据分析、决策支持以及模型训练等过程成功的基础。把控数据质量主要包括以下几个方面:

数据质量的要素:

  1. 准确性:数据是否正确无误,没有错误或偏差。
  2. 完整性:数据集中是否存在缺失值或丢失的信息。
  3. 一致性:数据内部及跨数据集之间是否存在矛盾或不匹配。
  4. 时效性:数据是否是最新的,能否反映当前状况。
  5. 有效性:数据是否符合预期的格式和范围,如日期格式正确、数值在合理范围内。
  6. 唯一性:记录是否有重复。
  7. 可追溯性:数据的来源和变更历史是否清晰可查。

如何把控数据质量:

  1. 数据验证规则:定义一套数据验证规则,比如字段格式、范围限制、唯一性约束等,并在数据输入时或定期进行检查。
  2. 数据清洗:使用Python中的Pandas等库进行数据清洗,包括处理缺失值、去除重复数据、纠正错误数据等。
  3. 数据质量报告:定期生成数据质量报告,包括数据概况、缺失值统计、异常值检测等,以便监控数据质量变化。
  4. 自动化检查:利用脚本或工具自动化执行数据质量检查任务,提高效率并减少人为错误。
  5. 数据治理:建立数据治理框架,明确数据责任人,制定数据管理策略和流程,确保数据从源头到应用的每个环节都有质量控制。
  6. 用户反馈循环:鼓励数据使用者反馈数据问题,建立快速响应机制,及时修正数据错误。
  7. 持续监控:实施数据质量监控系统,对关键指标进行实时或定期监控,一旦发现数据质量问题立即报警并采取措施。

通过上述方法,可以在Python中有效地把控数据质量,确保数据分析和决策基于可靠的数据基础之上。

数据清洗

数据清洗是数据预处理的关键步骤,旨在识别并纠正数据集中的错误、不完整、不准确或无关的部分,以提升数据质量,确保后续分析或建模的准确性。
在Python中,数据清洗通常借助pandas库完成。

示例
  1. 打开文件,read_xxx()。常用的入参就是文件路径和编码,如过有用到其他参数的用法,临时再学就好了。
import pandas as pd

# 打开一个名为"test.csv"的文件,没有就新建一个,我就是新建的
df = pd.read_csv('test.csv', encoding='gbk')

pd模块中还有很多read开头的函数,自行尝试。

在这里插入图片描述

  1. head(n=5)函数:获取指定行数信息
    这个函数可以获取你拿到的数据的指定行数的部分,默认值是五。

    # 读取一下文件的信息,打印1行试试
    print(df.head(1))
    

    这是打印出的数据 在这里插入图片描述
    这是文件内容,注意我们的是csv文件,从Alice开始的才算是正式的数据
    在这里插入图片描述
    再换成打印3行试试,因为我们数据就3行
    在这里插入图片描述
    可以看到,数据全部打印了,前面有012,这个很好理解,我不多解释了。

  2. info()函数:获取数据信息
    函数用于展示DataFrame(简单理解为就是我们打开的数据)的结构、类型和内存使用情况。

    使用起来很简单,直接调用就好了。

    参数说明

    • verbose:默认为None,如果设置为True或False,将覆盖pd.options.display.max_info_columns的设置,控制是否打印所有列的详细信息。如果DataFrame的列数超过max_info_columns,默认行为是仅显示前后的部分列。
    • buf:默认为sys.stdout,指定输出信息的目标,可以是一个文件对象或者具有write()方法的任何对象。
    • max_cols:控制在详细输出中显示的最大列数。如果DataFrame的列数超过这个值,且verbose未被显式设置,那么将显示简略的摘要而非所有列的详情。默认值来自pd.options.display.max_info_columns。
    • memory_usage:控制是否显示DataFrame及其索引的内存使用情况。可以是布尔值(True/False),或者字符串"deep"。"deep"会更深入地计算内存使用,包括嵌套结构的内存。默认情况下,仅显示内存使用情况的摘要。
    • null_counts:在pandas的新版本中,此参数已被移除,因为现在默认总是显示非空值的数量。

    返回值
    info()函数本身不返回任何值,而是直接打印输出到控制台或指定的缓冲区。输出内容通常包括:

    • DataFrame的总行数和列数。
    • 每列的名称、非空值数量、数据类型。
    • 索引的类型和非空值数量。
    • 如果设置了memory_usage=True或memory_usage=‘deep’,还会显示DataFrame及其索引的内存使用量。
    print(df.info())
    

    在这里插入图片描述
    稍微解释一下:

    • 类信息:<class ‘pandas.core.frame.DataFrame’> 表明df是一个pandas的DataFrame对象。
    • 索引范围:RangeIndex: 3 entries, 0 to 2 表示DataFrame有3行数据,索引是从0到2的整数序列。
    • 数据列详情:
    • 列出了每一列的名称(Column)、非空值的数量(Non-Null Count)以及数据类型(Dtype)。
    • 列1 (Name):3个非空值,数据类型为object(通常表示字符串)。
    • 列2 (Age):3个非空值,数据类型为int64(整数)。
    • 列3 (City):3个非空值,数据类型为object(通常表示字符串)。
    • 数据类型汇总:dtypes: int64(1), object(2) 总结了DataFrame中各数据类型的列数。这里说明有1列是int64类型,2列是object类型。
    • 内存使用:memory usage: 204.0+ bytes 表示该DataFrame占用的大约内存大小。注意这里的“+”表明计算可能不是完全精确的,特别是当使用memory_usage='deep’时,但对于估计内存消耗很有帮助。
    • 结尾的None:这是因为df.info()函数实际上没有返回值(返回None),它直接将信息输出到控制台。当你在Python脚本或交互式环境中 调用print(df.info())时,最终的None是由print函数打印出来的,表示df.info()执行完毕并没有返回任何可供打印的实际内容。
  3. isnull()函数:获取缺失值对象

    print(df.isnull)
    

    这个函数会返回一个和原来数据结构相同但是为布尔值的对象,通过这个对象,我们可以对数据中的缺失值进行操作。

    简单修改一下原来的数据。

    在这里插入图片描述

    通过isnull函数,我们可以明确看到哪一行哪一列有缺失值,通过sum函数,我们可以明确知道的哪一列缺失了几个值。

    在这里插入图片描述

    通过前后几次的输出对比,可以明显发现我们已经将name一列的缺失值补充上去,并且为我们设置的值x。

    最后输出框中出现一堆红色的告警,提示的是关于链式赋值(chained assignment)和 inplace 操作的问题。pandas 3.0版本中,这种通过链式赋值进行的inplace操作可能不再有效,因为中间对象可能被视为原对象的一个副本,而不是原对象本身。
    为了避免这个警告并确保代码在未来版本的pandas中也能正常工作,您可以按照警告的建议采用以下两种方式之一:df.method({col: value}, inplace=True)或者df[col] = df[col].method(value)。

    换成我们的代码就是

    # 方法1
    df.fillna({'Name': "x"}, inplace=True)
    # 方法2
    df['Name'] = df['Name'].fillna("x")
    
  4. dropna()函数:删除有缺失值的行

    # 直接删除含有缺失值的行
    df.dropna(inplace=True)
    

    在这里插入图片描述

  5. drop_duplicates()函数:删除重复数据

    df.drop_duplicates(inplace=True)
    

    在这里插入图片描述

  6. astype()函数:类型转换

    	# 将某列转换为整型
    df['column_name'] = df['column_name'].astype(int)
    

    在这里插入图片描述
    注意如果列有缺失值,可能会导致转换失败,别问我怎么知道的。

  7. 文本数据清洗:.str

    # 去除空格
    df['text_column'] = df['text_column'].str.strip()
    # 大小写
    df['text_column'] = df['text_column'].str.lower()
    

    这个就不单独运行了,看函数名就知道啥作用

  8. replace()函数:替换特定值

    df['column_name'].replace('old_value', 'new_value', inplace=True)
    

    在这里插入图片描述

数据清洗的方法还有很多,想写完不太可能,写一些常用的简单的认知一下即可。

结尾

数据质量不止数据清洗这一项,还有其他很多项,但是基本都是配合着一起来的。这里只是初步认知,不需要讲那么多。大概都了解了,就进到项目那一块去,等你写出一个项目,比如一个小游戏后,成就感足以让你继续向下努力学习了,这里太深入讲只会浪费热情,耐心。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】(6.2)堆的应用——Top-K问题(C语言)

系列文章目录 文章目录 系列文章目录问题引入一、TopK 问题 是什么&#xff1f;二、TopK 问题解决思路2.1 TopK 思路2.2 随机产生数字2.2 完整代码2.3 验证结果 问题引入 TopK 问题 (在一堆数据里面找到前 K 个最大 / 最小的数)。 一、TopK 问题 是什么&#xff1f; 生活中也…

太速科技-FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡

FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡 一、板卡概述 本子卡基于FMC连接器实现4路125M采样率AD输出&#xff0c;两路1G采样率DA输出子卡&#xff0c;板卡默认由FMC连接器12V供电&#xff0c;支持外参考时钟&#xff0c;外输入时钟&#xff0c;外触发。 …

全端面试题15(canvas)

在前端开发领域&#xff0c;<canvas> 元素和相关的 API 是面试中经常被提及的主题。下面是一些常见的关于 HTML5 Canvas 的面试问题及解答示例&#xff1a; 1. 什么是 <canvas> 元素&#xff1f; <canvas> 是 HTML5 引入的一个用于图形渲染的标签。它本身并…

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流 地表最强大的高级学术AI专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣的朋友可…

RT-Thread和freeRTOS启动流程

一. freeRTOS启动流程 二. RT-Thread启动流程 因为RT-Thread中我们定义了补丁函数也叫做钩子函数--$Sub$$main()--作为一个新功能函数&#xff0c;可以将原有函数劫持下来&#xff0c;并在之后的程序运行中加上$Super $ $前缀来重新调用原始函数。 所以启动流程是$Sub$$main(…

3033.力扣每日一题7/5 Java

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先创建一个与…

CV01_相机成像原理与坐标系之间的转换

目录 0.引言&#xff1a;小孔成像->映射表达式 1. 相机自身的运动如何表征&#xff1f;->外参矩阵E 1.1 旋转 1.2 平移 2. 如何投影到“像平面”&#xff1f;->内参矩阵K 2.1 图像平面坐标转换为像素坐标系 3. 三维到二维的维度是如何丢失的&#xff1f;…

重载一元运算符

自增运算符 #include<iostream> using namespace std; class CGirl { public:string name;int ranking;CGirl() { name "zhongge"; ranking 5; }void show() const{ cout << "name : "<<name << " , ranking : " <…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本&#xff0c;因为新版本可能出现与python不匹配问题。 我选择3.6.3版本&#xff0c;因为我安装的python是3.8&#xff0c;可以匹配版本。同时window操…

C++:拷贝构造函数

拷贝构造函数的引入 用对象来初始化对象 (1)简单变量定义时&#xff0c;可以直接初始化&#xff0c;也可以用另一个同类型变量来初始化。举例说明 (2)用class来定义对象时&#xff0c;可以直接初始化&#xff0c;也可以用另一个对象来初始化。举例说明 testperson xiaohong(na…

搜索+动态规划

刷题刷题刷题刷题 ​​​​​​​​​​​​​​Forgery - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; 需要两个数组&#xff0c;一个数组全部初始化为".",另一个数组输入数据&#xff0c;每碰到一个“.”就进行染色操作&#xff0c;将其周围的…

鸿蒙:1.入门

概述 简介 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司发布的一款智能终端系统&#xff0c;是基于微内核的面向全场景的分布式操作系统。它致力于提供更加安全、高效、低延迟、低功耗的操作体验&#xff0c;可通过技术手段对应用程序和设备进行智能协同&#xf…

「植物大战僵尸杂交版」保姆级攻略大全以及下载指南

植物大战僵尸杂交版自推出以来&#xff0c;以其独特的植物组合和策略玩法&#xff0c;迅速赢得了玩家们的喜爱。如果你正准备加入这场植物与僵尸的战斗&#xff0c;或者已经在战斗中寻求突破&#xff0c;那么这份保姆级的攻略大全将是你的得力助手。同时&#xff0c;我们也提供…

【收藏级神丹】Liae384_刘亦菲_直播可用,平衡度最高的原创神丹,独家珍稀资源

Liae384_刘亦菲_DFL神丹&#xff1a;点击下载 此丹较重&#xff0c;小卡可以使用但不能训练&#xff0c;实测复训适合24G卡8G、12G、16G卡下载练好的专丹直接使用即可384的Liae对各类杂论视频兼容比较好&#xff0c;高参也能容忍高分辨率的DST复用方式: 非必要不用删除AB&…

解决前后端同一个端口跨域问题

前端起了一个代理 如果url是api开头的自动代理访问8080端口&#xff08;解决前后端端口不一致要么是前端代理&#xff0c;要么是后端加过滤器&#xff09; proxy:{/api:{target:http://localhost:8080,changeOrigin : true,// 替换去掉路径上的api// rewrite:(path)>path.r…

(0)2024年基于财务的数据科学项目Python编程基础(Jupyter Notebooks)

目录 前言学习目标&#xff1a;学习内容&#xff1a;大纲 前言 随着数据科学的迅猛发展&#xff0c;其在财务领域的应用也日益广泛。财务数据的分析和预测对于企业的决策过程至关重要。 本专栏旨在通过Jupyter Notebooks这一强大的交互式计算工具&#xff0c;介绍基于财务的数…

【SqlServer无法远程连接】之解决办法

【SqlServer无法远程连接】之解决办法 打开这个软件&#xff0c;并把对应的项启动即可

Https网站如何申请免费的SSL证书及操作使用指南

前言 在当今互联网环境下&#xff0c;HTTPS已成为网站安全的标配&#xff0c;它通过SSL/TLS协议为网站数据传输提供加密&#xff0c;保障用户信息的安全。申请并部署免费SSL证书&#xff0c;不仅能够提升网站的专业形象&#xff0c;还能增强用户信任。本文将详细介绍如何在知名…

vue 模糊查询加个禁止属性

vue 模糊查询加个禁止属性 父组件通过属性传&#xff0c;是否禁止输入-------默认可以输入

AJAX-day1:

注&#xff1a;文件布局&#xff1a; 一、AJAX的概念&#xff1a; AJAX是浏览器与服务器进行数据通信的技术 >把数据变活 二、AJAX的使用&#xff1a; 使用axios库&#xff0c;与服务器进行数据通信 基于XMLHttpRequest封装&#xff0c;代码简单 Vue,React项目使用 学习…