python数据清洗的三个常用的处理方式!

2023-11-06

关于python数据处理过程中三个主要的数据清洗说明,分别是缺失值/空格/重复值的数据清洗。

这里还是使用pandas来获取excel或者csv的数据源来进行数据处理。若是没有pandas的非标准库需要使用pip的方式安装一下。

pip install pandas

准备一下需要处理的脏数据,这里选用的是excel数据,也可以选择其他的格式数据,下面是源数据截图。

在这里插入图片描述

使用pandas的read_excel()函数读取出我们需要处理的data.xlsx文件。

# Importing the pandas library and giving it an alias of pd.
import pandas as pd

# Reading the excel file and storing it in a variable called `result_`
result_ = pd.read_excel('D:/test/data.xlsx')

# Printing the dataframe.
print(result_)

注意,若是新的python环境直接安装pandas模块后执行上面的读取excel数据代码可能会出现没有openpyxl模块的情况。

这时候,我们使用pip的方式再次安装一下openpyxl即可。

pip install openpyxl

完成后再次执行读取excel数据的代码块会成功的返回结果。

#           姓名    年龄    班级   成绩 表现
# 0   Python 集中营  10  1210   99  A
# 1   Python 集中营  11  1211  100  A
# 2   Python 集中营  12  1212  101  A
# 3   Python 集中营  13  1213  102  A
# 4   Python 集中营  14  1214  103  A
# 5   Python 集中营  15  1215  104  A
# 6   Python 集中营  16  1216  105  A
# 7   Python 集中营  17  1217  106  A
# 8   Python 集中营  18  1218  107  A
# 9   Python 集中营  19  1219  108  A
# 10  Python 集中营  20  1220  109  A
# 11  Python 集中营  21  1221  110  A
# 12  Python 集中营  22  1222  111  A
# 13  Python 集中营  23  1223  112  A
# 14  Python 集中营  24  1224  113  A
# 15  Python 集中营  25  1225  114  A
# 16  Python 集中营  26  1226  115  A
# 17  Python 集中营  27  1227  116  A
# 18  Python 集中营  28  1228  117  A
#
# Process finished with exit code 0

准备好数据源之后,我们使用三个方式来完成对源数据的数据清洗。

1.strip函数清除空格

首先,将所有的列名称提取出来,使用DataFrame对象的columns函数进行提取。

# Extracting the column names from the dataframe and storing it in a variable called `columns_`.
columns_ = result_.columns.values

# Printing the column names of the dataframe.
print(columns_)

# ['  姓名  ' '年龄' '班级' '成绩' '表现']

从列名称的打印结果发现’姓名’这一列是存在空格的,我们直接查找列名称是找不到的,因为需要对列名称的空格进行数据清洗。

为了减少代码块的使用,我们这里直接使用列表推导式的方式对列名称的空格进行清洗。

# A list comprehension that is iterating over the `columns_` list and stripping the whitespaces from each element of the
# list.
result_.columns = [column_name.strip() for column_name in columns_]

# Printing the column names of the dataframe.
print(result_.columns.values)

# ['姓名' '年龄' '班级' '成绩' '表现']

经过数据清洗后,发现所有的列名称空格情况已经被全部清洗了。若是存在某个列中的值空格需要清洗也可以采用strip函数进行清洗。

2.duplicated函数清除重复数据

关于重复数据的判断有两种情况,一种是两行完全相同的数据即为重复数据。另外一种则是部分相同指的是某个列的数据是相同的需要清洗。

# The `duplicated()` function is returning a boolean series that is True if the row is a duplicate and False if the row is
# not a duplicate.
repeat_num = result_.duplicated().sum()

# Printing the number of duplicate rows in the dataframe.
print(repeat_num)

# 1

通过上面的duplicated().sum()函数得到的是两个完全相同的数据行是多少。

接着则可以对源数据进行实际意义上的删除,使用DataFrame对象的drop_duplicates函数进行删除。

# The `drop_duplicates()` function is dropping the duplicate rows from the dataframe and the `inplace=True` is
# modifying the dataframe in place.
result_.drop_duplicates(inplace=True)

# Printing the dataframe.
print(result_)

#            姓名  年龄    班级   成绩 表现
# 0   Python 集中营  10  1210   99  A
# 1   Python 集中营  11  1211  100  A
# 2   Python 集中营  12  1212  101  A
# 3   Python 集中营  13  1213  102  A
# 4   Python 集中营  14  1214  103  A
# 5   Python 集中营  15  1215  104  A
# 6   Python 集中营  16  1216  105  A
# 7   Python 集中营  17  1217  106  A
# 8   Python 集中营  18  1218  107  A
# 9   Python 集中营  19  1219  108  A
# 10  Python 集中营  20  1220  109  A
# 11  Python 集中营  21  1221  110  A
# 12  Python 集中营  22  1222  111  A
# 13  Python 集中营  23  1223  112  A
# 14  Python 集中营  24  1224  113  A
# 15  Python 集中营  25  1225  114  A
# 16  Python 集中营  26  1226  115  A
# 17  Python 集中营  27  1227  116  A

因为最后一行和第一行的数据是完全相同的,因此最后一行的数据已经被清洗掉了。

一般在数据清洗删除重复值之后需要重置索引,避免索引产生不连续性。

# The `range(result_.shape[0])` is creating a list of numbers from 0 to the number of rows in the dataframe.
result_.index = range(result_.shape[0])

# The `print(result_.index)` is printing the index of the dataframe.
print(result_.index)

# RangeIndex(start=0, stop=18, step=1)

3.数据缺失值补全

一般查看DataFrame数据对象的缺失值就是通过使用isnull函数来提取所有数据缺失的部分。


# The `isnull()` function is returning a boolean series that is True if the value is missing and False if the value
# is not missing.
sul_ = result_.isnull()

# The `print(sul_)` is printing the boolean series that is True if the value is missing and False if the value is not
# missing.
print(sul_)

#        姓名     年龄     班级     成绩     表现
# 0   False  False  False  False  False
# 1   False  False  False  False  False
# 2   False  False  False  False  False
# 3   False  False  False  False  False
# 4   False  False  False  False  False
# 5   False  False  False  False  False
# 6   False  False  False  False  False
# 7   False  False  False  False  False
# 8   False  False  False  False  False
# 9   False  False  False  False  False
# 10  False  False  False  False  False
# 11  False  False  False  False  False
# 12  False  False  False  False  False
# 13  False  False  False  False  False
# 14  False  False  False  False  False
# 15  False  False  False  False  False
# 16  False  False  False  False  False
# 17  False  False  False  False  False

返回的每一个单元格数据结果为False则代表这个单元格的数据是没有缺失的,或者也可以使用notnull来反向查看。

使用isnull函数不想显示很多的列表数据时,可以使用sum函数进行统计。

# The `isnull_sum = result_.isnull().sum()` is returning a series that is the sum of the boolean series that is True if
# the value is missing and False if the value is not missing.
isnull_sum = result_.isnull().sum()

# The `isnull_sum = result_.isnull().sum()` is returning a series that is the sum of the boolean series that is True if
# the value is missing and False if the value is not missing.
print(isnull_sum)

# 姓名    0
# 年龄    0
# 班级    0
# 成绩    0
# 表现    0
# dtype: int64

通过isnull函数处理后使用sum函数进行统计,统计后会返回每一列的数据单元格为空的个数。

接下来就是数据值的填补过程,通常可以筛选每一列中的空值填补固定的数据。

# The `result_.loc[result_.姓名.isnull(), '姓名']` is returning a series that is the values of the column `姓名`
# where the values are missing. The `'Python 集中营'` is the value that is being assigned to the series.
result_.loc[result_.姓名.isnull(), '姓名'] = 'Python 集中营'

# Printing the dataframe.
print(result_)

#             姓名  年龄    班级   成绩 表现
# 0   Python 集中营  10  1210   99  A
# 1   Python 集中营  11  1211  100  A
# 2   Python 集中营  12  1212  101  A
# 3   Python 集中营  13  1213  102  A
# 4   Python 集中营  14  1214  103  A
# 5   Python 集中营  15  1215  104  A
# 6   Python 集中营  16  1216  105  A
# 7   Python 集中营  17  1217  106  A
# 8   Python 集中营  18  1218  107  A
# 9   Python 集中营  19  1219  108  A
# 10  Python 集中营  20  1220  109  A
# 11  Python 集中营  21  1221  110  A
# 12  Python 集中营  22  1222  111  A
# 13  Python 集中营  23  1223  112  A
# 14  Python 集中营  24  1224  113  A
# 15  Python 集中营  25  1225  114  A
# 16  Python 集中营  26  1226  115  A
# 17  Python 集中营  27  1227  116  A

4.数据保存

数据清洗完成之后,可以使用DataFrame对象提供的to_csv/to_excel等函数进行特定格式的数据保存。

result_.to_excel('data.xlsx')

最后,整个数据清洗的过程就完成了,希望可以给大家带来帮助,感谢阅读!

【往期精彩】

数据可视化:四种关系图数据可视化的效果对比!

学会这几项windows操作,轻松玩转自己的个人电脑!

python自动化:使用socket做一个多进程的端口扫描器!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python数据清洗的三个常用的处理方式! 的相关文章

  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • Linux 网络通讯 : smbd 命令详解

    smbd命令用于Samba服务器程序 smbd为Samba服务器程序 可分享文件与打印机等网络资源供Windows相关的用户端程序存取 语法 1 smbd aDhoP d lt 排错层级 gt i lt 范围 gt l lt 记录文件 gt
  • FPGA(三)——基于FPGA的SPI通讯协议实现

    一 SPI通讯基本原理 1 SPI通讯介绍 SPI Serial Perripheral Interface 串行外围设备接口 是 Motorola 公司推出的一种同步串行接口技术 SPI 总线在物理上是通过接在外围设备微控制器 PICmi
  • Docker快速安装RabbitMQ服务

    Docker快速安装RabbitMQ服务 快速开始 bin bash 建议保存为start sh脚本执行 docker run d hostname my rabbit name some rabbit restart always p 1
  • Java 基础入门篇(一):Java 概述

    文章目录 一 Java 概述 二 Java 的产品 JDK 2 1 JDK 安装 2 2 Java与 Javac 介绍 2 3 Java 程序的开发步骤 三 Java 程序的执行原理 四 JDK 的组成 五 Java 的跨平台工作原理 一
  • Solidity transfer,call和send 的区别

    address transfer throws on failure forwards 2 300 gas stipend not adjustable safe against reentrancy should be used in m
  • SDF文件【简要说明】

    SDF Standard Delay Format 标准延时格式文件 常用延迟反标注 该文件包含了仿真用到的所有 IOPATH INTERCONNECT的延时 线延时 INTERCONNECT fsm block U27 Q fsm blo
  • 2020-10-10

    闭包和装饰器 1 高阶函数 接收函数作为参数是高阶函数 将函数作为返回值返回的函数就是高阶函数 2 匿名函数 lambda函数 无名函数 语法 lambda 参数列表 表达式 filter 函数 过滤列表 第一个参数 函数 第二个参数 序列
  • Java设计模式(十四)—— 模板方法模式

    模板方法模式是指定义一个操作中算法的骨架 而将一些步骤延迟到子类中 模板方法使子类可以不改变一个算法的结构 即可重定义该算法的某些特定步骤 适合模板方法模式的情景如下 编制一个通用算法 将某些步骤的具体实现留给子类来实现 需要重构代码 将各
  • 对Linux svn保存的明文密码加密

    需求来源 随着GitHub GitLab的兴起 svn已经渐渐的没落了 从公司当初的源代码管理服务器 逐渐演变成公司的ftp服务器 最近需要部署gitlab的CI单元测试模块 而软件版本都在svn上有备份 我就希望从代码的提交 gt 到版本
  • Python统计文本数字,字母,单词量

    统计一百万位圆周率中数字0 9各自的数量 统计一本书中字母a z各自的数量 统计一本书共有多少个单词 含重复的单词 和单词量 不含重复的单词 import string class CountNums 求txt文本中数字或字母的数量 def
  • Jvm类加载机制详解---类加载器及双亲委托模型

    前面介绍了类加载的几个过程 实际中这些过程大部分都是由虚拟机本身去执行的 我们没有办法去改变或影响这些过程的执行 但是虚拟机团队将类加载阶段第一步中的 通过一个类的全限定名来获取描述该类的二进制字节流 这个动作放到虚拟机外部去实现 以便让应
  • 使用R语言绘制ovarian数据集中病例年龄分布的直方图

    使用R语言绘制ovarian数据集中病例年龄分布的直方图 直方图是一种常用的数据可视化工具 用于展示连续变量的分布情况 在R语言中 我们可以使用hist 函数轻松地创建直方图 本文将展示如何使用R语言绘制ovarian数据集中病例年龄的分布
  • String、StringBuffer和StringBuilder三者之间的区别

    最基本的区别就是String是一个字符串常量 长度不可改变 StringBuffer和StringBuilder是字符串变量 他们两个的长度可以改变 但StringBuffer是线程安全的 而StringBuilder是非线程安全的 Str
  • ** LeetCode 刷题 459

    这是一道我没做出来的简单题 5555 学习 方法1 移动匹配 如果一个字符串可以由一个字串重复获得 那么将两个相同字符串并起来 一定可以在中间再找到该字符串 class Solution public bool repeatedSubstr
  • JavaEE-过滤器和监听器 案例分析

    目录 过滤器和监听器 什么是过滤器 过滤器编程接口 接口Filter的主要方法 设计过滤器 实例1 编写一个过滤器审计用户对资源的访问 什么是监听器 监听器编程接口 设计监听器 实例 编写一个HttpSession事件监听器用来记录当前在线
  • Python pandas读取Excel 数据写入到数据库

    需求得到天眼查的法人信息数据导入到数据库中 经过多次不断试错最后使用Python导入 先上代码 import pandas as pd import sqlalchemy as sqla import os 读取Excel数据 def ge
  • net::ERR_HTTP2_PROTOCOL_ERROR 200错误

    场景 web端的环境上某一个请求报这个问题了 其他的请求正常 打开f12控制台看到异常net ERR HTTP2 PROTOCOL ERROR 200错误 排查 查看nginx的error log 报是某一个临时文件的权限不足 原因是启动n
  • CSVDE导出AD域下指定子OU的Group中所有成员的信息

    CSVDE导出AD域下指定子OU的Group中所有成员的信息 最近搞CSVDE搞的头疼 网上各种乱七八糟的资料 都是东搞一下西搞一下 好不容易找到一篇系统性的介绍使用CSVDE来对AD进行导入导出操作的文章 具体链接 http www co
  • mybatis(六) 处理枚举类型

    处理枚举类型 若想映射枚举类型 Enum 则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 比如说我们想存储取近似值时用到的舍入模式 默认情况下 MyBatis 会利用 EnumT
  • python数据清洗的三个常用的处理方式!

    关于python数据处理过程中三个主要的数据清洗说明 分别是缺失值 空格 重复值的数据清洗 这里还是使用pandas来获取excel或者csv的数据源来进行数据处理 若是没有pandas的非标准库需要使用pip的方式安装一下 pip ins