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

前言

本文是根据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.mzph.cn/web/40242.shtml

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

相关文章

基于单片机的防酒驾控制系统设计

摘 要&#xff1a; 酒后驾车的危害十分巨大&#xff0c;因此&#xff0c;笔者介绍了一种基于单片机的防酒驾控制系统。系统由酒精传感器 MQ-3测量汽车驾驶员体内的酒精含量浓度&#xff0c;通过 A/D 转换器转换成数字信号传给单片机&#xff0c;经过单片机处理后显示酒精浓度&a…

electron教程(二)控制应用程序的事件生命周期

1.will-finish-launching 当应用程序完成基础的启动的时候被触发&#xff0c;在 Windows 和 Linux 中, will-finish-launching 事件与 ready 事件是相同的; 在 macOS 中&#xff0c;这个事件相当于 NSApplication 中的 applicationWillFinishLaunching 提示。 app.on(will-fi…

Butterfly主题文章标题改成转动小风车

效果 标题级别不同小风车颜色不同&#xff0c;鼠标移入会有转动变慢及变色效果。 新建css 建议在/source下创建诸如img/css/js等文件夹&#xff0c;存放文章或网站用的素材&#xff0c;分门别类后续也方便维护。 Hexo打包的时候&#xff0c;会自动把/source下的文件&#…

深度神经网络语言识别

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 使用 DNN 和字符 n-gram 对一段文本的语言进行分类&#xff08;附 Python 代码&#xff09; 资料来源&#xff0c;flaticon&#xff1a;htt…

AI绘画如何变现赚取副业收入?保姆级AI绘画SD和MJ副业实操教程建议收藏!

hi~大家好&#xff0c;我是向阳。 今天给大家分享一下我是如何通过AI绘画赚到一点小钱的&#xff01; 副业做个人IP&#xff0c;某书&#xff0c;专注Midjourney &#xff0c;深入 AI头像制作&#xff0c;小某书做了500头像&#xff0c;变现了差不多一万元&#xff0c;每日短…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【生成密钥(C/C++)】

生成密钥(C/C) 以生成ECC密钥为例&#xff0c;生成随机密钥。具体的场景介绍及支持的算法规格。 注意&#xff1a; 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复…

【C语言】五子棋(c语言实现)

这里写目录标题 最终效果菜单打印函数棋盘的初始化和打印人人对战落子判空函数悔棋函数判胜负函数人人对战 人机对战一是将直接调用rand生成随机值&#xff0c;这就不可控二是根据棋子赢面来判断哪里落子最好 如果选择退出程序直接exit就行主函数调用逻辑源代码 最终效果 五子棋…

‘艾’公益——微笑行动「广安站」为艾祝福,让笑起舞

艾多美“微笑行动”广安站拉开帷幕 此次爱心帮助7名唇腭裂患儿 重新绽放微笑 艾多美“微笑行动”广安站拉开帷幕 此次爱心帮助7名唇腭裂患儿 重新绽放微笑 不让笑容留有缺憾 每个孩子都有微笑的权利 艾多美向唇腭裂儿童伸出援手 绽放笑容&#xff0c;拥抱全新的未来 2…

进程、程序、应用程序之间的关系

文章目录 进程和程序进程和应用程序总结参考资料 进程和程序 程序&#xff1a;程序是存放在硬盘中的可执行文件&#xff0c;主要包括代码指令和数据。程序本身是一个静态的文件&#xff0c;只有在被操作系统加载到内存中并执行时才会变成进程。 进程&#xff1a;进程是程序在…

卫星轨道平面简单认识

目录 一、轨道平面 1.1 轨道根数 1.2 应用考虑 二、分类 2.1 根据运行高度 2.2 根据运行轨迹偏心率 2.3 根据倾角大小 三、卫星星座中的轨道平面 四、设计轨道平面的考虑因素 一、轨道平面 1.1 轨道根数 轨道平面是定义卫星或其他天体绕行另一天体运动的平面。这个平…

第十六章 Qt的文件处理操作详解

目录 一、基本文件操作 二、二进制文件读写 三、文本文件读写 四、操作例子 1、QTextStream的流操作符 一、基本文件操作 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之…

TF-IDF和BM25原理和区别

TF-IDF TF-IDF是TF&#xff08;词频&#xff0c;Term Frequency&#xff09;和IDF&#xff08;逆文档频率&#xff0c;Inverse Document Frequency&#xff09;的乘积。我们先来看他们分别是怎么计算的&#xff1a; TF的计算有多种方式&#xff0c;常见的是 除以文章总词数是…

从CPU的视角看C++的构造函数和this指针

从汇编角度&#xff0c;清晰的去看构造函数和this指针到底是个什么东西呢&#xff1f;也许可以解决你的一点小疑问 首先写一个很简单的代码demo&#xff1a; class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

【FreeRTOS】同步互斥与通信 有缺陷的同步示例

目录 1 同步互斥与通信1.1 同步互斥与通信概述1.2 同步与互斥的概念1.3 同步的例子&#xff1a;有缺陷1.4 freertos.c源码3. 互斥的例子&#xff1a;有缺陷4. 通信的例子&#xff1a;有缺陷5. FreeRTOS的解决方案 1 同步互斥与通信 1.1 同步互斥与通信概述 参考《FreeRTOS入门…

搞钱四步:干活、出名、破圈、整合

搞钱这事儿&#xff0c;说起来有四步&#xff1a;干活、出名、破圈、整合。 咱们现在这个时代&#xff0c;谁要是能把自尊心放一边&#xff0c;勇敢站到舞台上展示才华&#xff0c;变现那是分钟的事儿。 只要你敢承认自己想要财富&#xff0c;并且不停地使用正确的方法论&…

python语句前面有一个$是什么意思

“$”是汇编语言中的一个预定义符号&#xff0c;等价于当前正汇编到的段的当前偏移值。例如&#xff1a;指令“jmp $3”中的“$”表示当前这条指令在代码段中的偏移量。 代表当前指令的地址&#xff0c;如&#xff1a; data segment str1 db a,b,c,d leng equ $-str 就是当前地…

JVM专题之性能优化

运行时优化 方法内联 > 方法内联,是指 **JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身** ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 > > **注:** > > * **C++的inline属于编译后内联,…

知名品牌因商标痛失市场:114家直营店山寨店7000多家!

奶茶知名品牌“鹿角巷”当年红遍大江南北&#xff0c;是最早的新茶饮品牌&#xff0c;但是当年商标注册存在问题&#xff0c;被同行奶茶品牌抢占了先机&#xff0c;发声明“对大陆商标注册细则不详&#xff0c;在商标注册过程中让假店钻了法律空档”&#xff0c;最夸张的时候全…

如何用Python向PPT中批量插入图片

办公自动化办公中&#xff0c;Python最大的优势是可以批量操作&#xff0c;省去了用户粘贴、复制、插入等繁琐的操作。经常做PPT的朋友都知道&#xff0c;把图片插入到PPT当中的固定位置是一个非常繁琐的操作&#xff0c;往往调整图片时耗费大量的时间和精力。如何能省时省力插…