当前位置: 首页 > news >正文

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)
    

    在这里插入图片描述

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

结尾

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

相关文章:

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

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…...

【LLM】一、利用ollama本地部署大模型

目录 前言 一、Ollama 简介 1、什么是Ollama 2、特点&#xff1a; 二、Windows部署 1.下载 2.安装 3.测试安装 4.模型部署&#xff1a; 5.注意 三、 Docker部署 1.docker安装 2.ollama镜像拉取 3.ollama运行容器 4.模型部署&#xff1a; 5.注意&#xff1a; 总结 前言…...

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序 SSM 新生报到系统小程序 功能介绍 学生 登录 注册 忘记密码 首页 学校公告 录取信息 录取详情 师资力量 教师详情 收藏 评论 用户信息修改 宿舍安排 签到信息 在线缴费 教室分配 我的收藏管理 我要发贴 我的发贴 管理…...

玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南

上一篇&#xff0c;带大家分享了&#xff1a;如何薅一台腾讯云服务器。 不过&#xff0c;只有一个月免费额度&#xff0c;到期后需要付费使用。 相对而言&#xff0c;海外云厂商更加慷慨一些&#xff0c;比如微软Azure、甲骨文、亚马逊AWS等。 甲骨文2019年9月就推出了永久免…...

Zabbix——宏

目录 宏的类型 常用宏 定义和使用宏 宏的优先级 使用宏的示例 在 Zabbix 中&#xff0c;宏&#xff08;Macros&#xff09;是一个非常强大的功能&#xff0c;允许你在监控配置中使用动态变量。宏可以在各种配置项中使用&#xff0c;例如触发器、动作、通知、图形和模板等。…...

Unity 简单载具路线 Waypoint 导航

前言 在游戏开发和导航系统中&#xff0c;"waypoint" 是指路径中的一个特定位置或点。它通常用于定义一个物体或角色在场景中移动的目标位置或路径的一部分。通过一系列的 waypoints&#xff0c;可以指定复杂的移动路径和行为。以下是一些 waypoint 的具体用途&…...

科普文:微服务之服务网格Service Mesh

一、ServiceMesh概念 背景 随着业务的发展&#xff0c;传统单体应用的问题越来越严重&#xff1a; 单体应用代码库庞大&#xff0c;不易于理解和修改持续部署困难&#xff0c;由于单体应用各组件间依赖性强&#xff0c;只要其中任何一个组件发生更改&#xff0c;将重新部署整…...

第四十九章 解决 IRIS 中的 SOAP 问题 - 发送消息时出现问题

文章目录 第四十九章 解决 IRIS 中的 SOAP 问题 - 发送消息时出现问题 第四十九章 解决 IRIS 中的 SOAP 问题 - 发送消息时出现问题 如果在向 IRIS Web 服务或客户端发送或接收 SOAP 消息时遇到问题&#xff0c;请考虑以下常见场景列表&#xff1a; SOAP 消息可能包含极长的字…...

STM32-HAL-FATFS(文件系统)(没做完,stm32f103zet6(有大佬的可以在评论区说一下次板子为什么挂载失败了))

1STM32Cube配置 1-1配置时钟 1-2配置调试端口 1-3配置uart 1-4配置SDIO&#xff08;注意参数&#xff09;&#xff08;其中他的初始化的异常函数给注释&#xff0c;SD卡文件写了&#xff09; 配置了还要打开中断和DMA可在我的其他文章中看一样的 1-5配置FatFs (只改了图选中…...

线性代数基础概念:矩阵

目录 线性代数基础概念&#xff1a;矩阵 1. 矩阵的定义 2. 矩阵的运算 3. 矩阵的特殊类型 4. 矩阵的秩 5. 矩阵的初等变换 6. 矩阵的特征值与特征向量 7. 矩阵的应用 8. 矩阵总结 总结 线性代数基础概念&#xff1a;矩阵 矩阵是线性代数中的另一个重要概念&#xff0…...

【优化论】约束优化算法

约束优化算法是一类专门处理目标函数在存在约束条件下求解最优解的方法。为了更好地理解约束优化算法&#xff0c;我们需要了解一些核心概念和基本方法。 约束优化的核心概念 可行域&#xff08;Feasible Region&#xff09;&#xff1a; 比喻&#xff1a;想象你在一个园艺场…...

7寸微型FPV无人机技术详解

对于7寸微型FPV&#xff08;First Person View&#xff0c;第一人称视角&#xff09;无人机技术的详解&#xff0c;可以从以下几个方面进行介绍&#xff1a; 一、定义与基本概念 FPV无人机&#xff0c;全称为“第一人称视角无人机”&#xff0c;它利用安装在无人机上的摄像头…...

大数据面试题之Presto[Trino](2)

目录 描述Presto中的Connector是什么&#xff1f; Presto如何实现数据源的插件化&#xff1f; 如何在单机上安装Presto&#xff1f; 描述在集群环境中部署Presto的步骤。 如何为Presto配置JVM参数&#xff1f; 如何优化Presto的配置以提高性能&#xff1f; Presto的日…...

STM32和DHT11使用显示温湿度度(代码理解)+单总线协议

基于STM32CT&#xff0c;利用DHT11采集温湿度数据&#xff0c;在OLED上显示。一定要阅读DHT11数据手册。 1、 DHT11温湿度传感器 引脚说明 1、VDD 供电3.3&#xff5e;5.5V DC 2、DATA 串行数据&#xff0c;单总线 3、NC 空脚 4、GND 接地&#xff0c;电源负极 硬件电路 微…...

EVM-MLIR:以MLIR编写的EVM

1. 引言 EVM_MLIR&#xff1a; 以MLIR编写的EVM。 开源代码实现见&#xff1a; https://github.com/lambdaclass/evm_mlir&#xff08;Rust&#xff09; 为使用MLIR和LLVM&#xff0c;将EVM-bytecode&#xff0c;转换为&#xff0c;machine-bytecode。LambdaClass团队在2周…...

深入Django(八)

掌握Django的管理后台 引言 在前七天的教程中&#xff0c;我们介绍了Django的基础架构、模型、视图、模板、URL路由、表单系统以及数据库迁移。今天&#xff0c;我们将深入了解Django的管理后台&#xff0c;这是一个功能强大的内置管理界面&#xff0c;用于创建、更新、查看和…...

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命 在科技的浪潮中,华为再次引领潮流,2024年的开发者大会带来了一系列令人瞩目的创新成果。从鸿蒙操作系统的全新Beta版到盘古大模型的震撼发布,华为正以前所未有的速度重塑智能生态。以下是本次大会的亮点,让我们…...

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.7-2.8

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第二周&#xff1a;机器学习策略&#xff08;2&#xff09;(ML Strategy (2))2.7 迁移学习&#xff08;Transfer learning&#xff09; 第三门课 结构化机器学习项目&#xff0…...

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下&#xff0c;挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前&#xff0c;Blender与KeyShot作为业界领先的全能渲染解决方案&#xff0c;广受推崇。它们虽皆能创造出令人信服的逼真视觉效果&#xff0c;但在特色功能上各有所长。本篇文章旨在…...

html5中的iframe

HTML5中的iframe 浏览上下文是浏览器展示文档的环境&#xff0c;通常是一个tab标签页&#xff0c;一个窗体或者是浏览器页面的一部分。每个浏览上下文都有一个活动文档的源和一个记录所有展示文档的有序历史。浏览上下文的通讯被严格限制&#xff0c;只有两个同源的浏览器上下…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...