越洗越黑”的Pandas数据清洗

引言

先来一个脑筋急转弯活跃一下枯燥工作日常,问:“什么东西越洗越黑?” 有没有猜到的?猜不到我告诉你吧! 答案是“煤球”。那么这个脑机急转弯跟我们要讨论的话题有没有关系呢?

嗯是的,还是沾点儿边儿的。

我们经常在项目上生产线之前,肯定会先在测试服上进行测试,测试之前肯定会将垃圾数据清理掉,防止脏数据影响我们正常的测试逻辑。

在我们pyhton语言中,也提供了清理无用数据,进行数据清洗的库Pandas, 确实也用了一下,封装的方法的确挺好用,但也同时碰到了一些问题,接下来分享一下吧。

知道 😮

在正式分享之前,我们得先知道Pandas库是干什么用的?它就是一个主要进行数据读取,数据清理提供方法的这么一个库。至于它的安装方式,非常简单👌,只要电脑安装了Pyhton环境,那么我们就使用cmd小黑屏使用pip进行安装即可。这里大概写一下吧,pip install pandas。安装完成以后,命令行进行查看是否安装成功python -c "import pandas; print(pandas.__version__)"

关于Pandas库是干什么的?如何安装它,我们大概就说这么多,下面将探讨我遇到的数据清洗的问题。

问题 😱

Pandas库给我们提供非常丰富的数据🚿清洗的函数,其中我们用的多的大概就是 dropna() 函数了。

dropna()函数的格式是这样的:DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)。其中axis:哪个轴(这个我们很熟悉了);how:设置整行还是所有;inplace:bool型,如果赋值为True的话,修改的是源数据。

我们浅浅的使用一下,实例代码如下:

"""
@Created on : 2024/5/29 10:56
@creator : er_nao
@File :pandas_06_数据清洗.py
@Description :
"""
import pandas as pddf = pd.read_csv("../property-data.csv")print(df)
print('\n')
print(df['NUM_BEDROOMS'])
print('\n')
print(df['NUM_BEDROOMS'].isnull())
print('\n')
# 使用dropna删除包含空数据的行
# 默认情况下,dropna() 方法返回一个新的 DataFrame,不会修改源数据
print('使用dropna删除包含空数据的行')
new_df = df.dropna()
print(new_df.to_string())
print('\n')
print(df.to_string())# 如果你要修改源数据 DataFrame, 可以使用 inplace = True 参数:
print('\n')
print('使用 inplace = True')
df.dropna(inplace=True)
print(df.to_string())# 输出结果#        PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 0      3
# 1      3
# 2    NaN
# 3      1
# 4      3
# 5    NaN
# 6      2
# 7      1
# 8     na
# Name: NUM_BEDROOMS, dtype: object
# 
# 
# 0    False
# 1    False
# 2     True
# 3    False
# 4    False
# 5     True
# 6    False
# 7    False
# 8    False
# Name: NUM_BEDROOMS, dtype: bool
# 
# 
# 使用dropna删除包含空数据的行
#            PID  ST_NUM    ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0     PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0  LEXINGTON            N            3      1.5    --
# 8  100009000.0   215.0    TREMONT            Y           na        2  1800
# 
# 
#            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 使用 inplace = True
#            PID  ST_NUM    ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0     PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0  LEXINGTON            N            3      1.5    --
# 8  100009000.0   215.0    TREMONT            Y           na        2  1800

我们可以看到,使用dropna()函数后,虽然会将有空值,NaN,na这些数据所在的行剔除掉🗑,个人认为这样非常的不友好🙅‍♂️,那么有其他办法不剔除掉吗?答案是有的。

Pandas库还给我们提供了一个fillna函数 我们可以使用它将那些空值,NaN替换让数据变得有意义。

"""
@Created on : 2024/5/29 10:56
@creator : er_nao
@File :pandas_06_数据清洗.py
@Description :
"""
import pandas as pddf = pd.read_csv("../property-data.csv")
print('源数据')
print(df)
print('\n')# 使用 mean() 方法计算列的均值并替换空单元格
print('使用fillna')
x = df['ST_NUM'].mean()
df['ST_NUM'].fillna(x, inplace=True)
print(df.to_string())# 输出结果# 源数据
#            PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0   104.0      PUTNAM            Y            3        1  1000
# 1  100002000.0   197.0   LEXINGTON            N            3      1.5    --
# 2  100003000.0     NaN   LEXINGTON            N          NaN        1   850
# 3  100004000.0   201.0    BERKELEY           12            1      NaN   700
# 4          NaN   203.0    BERKELEY            Y            3        2  1600
# 5  100006000.0   207.0    BERKELEY            Y          NaN        1   800
# 6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0   213.0     TREMONT            Y            1        1   NaN
# 8  100009000.0   215.0     TREMONT            Y           na        2  1800
# 
# 
# 使用fillna
#            PID      ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0  100001000.0  104.000000      PUTNAM            Y            3        1  1000
# 1  100002000.0  197.000000   LEXINGTON            N            3      1.5    --
# 2  100003000.0  191.428571   LEXINGTON            N          NaN        1   850
# 3  100004000.0  201.000000    BERKELEY           12            1      NaN   700
# 4          NaN  203.000000    BERKELEY            Y            3        2  1600
# 5  100006000.0  207.000000    BERKELEY            Y          NaN        1   800
# 6  100007000.0  191.428571  WASHINGTON          NaN            2   HURLEY   950
# 7  100008000.0  213.000000     TREMONT            Y            1        1   NaN
# 8  100009000.0  215.000000     TREMONT            Y           na        2  1800

大家可以看到,ST_NUM这一列计算了平均值,并且将之前的NaN也替换成了平均值。但是控制台的打印真的是这样吗?请看下图:

image.png

呀~~ 🦆🦆🦆 ,控制台居然有报红,我们程序员看到报红脑子第一个闪现的念头就是报错了。数据清洗还给洗出BUG了?那清洗还有什么意义。

经过分析,这不是报错,而是警告😡! 意思就是我们的写法有问题呗。既然这样,我们就遵从人家的提示,就改吧。

image.png

这儿的意思就是让我们改成这种形式,好的。

image.png

咿?!神奇呦🧙。果然不爆红了。那么这两种写法到底有什么区别呢?

a写法: df.method({col: value}, inplace=True)

b写法: df[col].method(value, inplace=True)

这其实就是一个链式赋值问题的问题,当使用b写法的时候,Pandas它不知道到底是想在原始DataFrame上进行更改,还是想创建一个副本进行更改,所以就会引发我们控制台的这个异常。

而a写法它通常是对整个DataFrame应用一个方法,同时传入一个列名与值的映射,指定要修改的列和相应的值。

作者:二闹
链接:https://juejin.cn/post/7374243125458649124

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

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

相关文章

三相智能电表通过Modbus转Profinet网关与PLC通讯案例

Modbus转Profinet网关(XD-MDPN100/300)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,它自带网…

接口请求参数为文件时如何测试

方法 工具:Postman 步骤:①点击body②点击form-data③选择key类型为fie ④输入参数名⑤选择参数上传⑥发送请求

对称二叉树(oj题)

一、题目链接https://leetcode-cn.com/problems/symmetric-tree/ 二、题目思路 给你一个二叉树的根节点 root , 检查它是否轴对称的思路: 1.将该树的左子树和右子树,当做两棵树,调用 判断两棵树是否对称相等的函数 2.判断两颗树是否对称相…

告别低效提问:掌握BARD技巧,让AI成为你的智能助手!

今天只聊一个主题:提示词 Prompt。 说到提示词,大家可能都看过GPT的高级示例,那些几百字的提示词,写起来确实不容易。 那么,如何写出同样效果的提示词呢? 有没有什么公式或者系统学习的方法?…

木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机

我们做视觉slam时会用到深度相机,但是gazebo的turtlebot3中只有rgb相机,没有深度,因此本节会修改代码,来给我们的小乌龟增加一个rgbd相机。 效果展示 发布topic如下图 图片大小都是640*480 1. 修改model.sdf文件 1.1 路径位置…

启智CV机器人,ROS, ubuntu 18.04

资料: https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安装ros环境 装VM。 装ubuntu18.04 desktop.…

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵

100道面试必会算法-27-美团2024面试第一题-前缀和矩阵 问题解读 给定一个 n x n 的二进制矩阵,每个元素是 0 或 1。我们的任务是计算矩阵中所有边长为 k 的子矩阵中,包含特定数量 1 的情况。例如,我们希望找到所有边长为 k 的子矩阵中包含 k…

【学习Day3】计算机基础

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 1.5.4 Cache替换算法 Cache的页面淘汰算法 常用替换算法有: • 随机替换算法RA…

vue3 setup 使用 beforeRouteEnter 组件内路由守卫

vue3 setup 使用 beforeRouteEnter 组件内路由守卫 setup 中只有onBeforeRouteLeave、onBeforeRouteUpdate两个钩子函数&#xff0c; 没有beforeRouteEnter对应的钩子函数&#xff0c;所以无法在setup中直接使用 <script setup> onBeforeRouteLeave((to, from) > {// …

3D软件开发的相关技术

3D开发涉及到广泛的技术和工具&#xff0c;涵盖了多个领域&#xff0c;包括计算机图形学、编程、设计、物理模拟等。以下是3D开发中常用的技术和工具&#xff0c;掌握这些技术需要广泛的知识和实践&#xff0c;项目的成功依赖于对这些技术的有效整合和应用。北京木奇移动技术有…

音视频开发14 FFmpeg 视频 相关格式分析 -- H264 NALU格式分析

H264简介-也叫做 AVC H.264&#xff0c;在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10&#xff0c;⼜叫Advanced Video Codec&#xff0c;因此常常称为MPEG-4 AVC或直接叫AVC。 原始数据YUV,RGB为什么要压缩-知道就行 在⾳视频传输过程中&#xff0c;视频⽂件的传输…

热敏电阻的设计

热敏电阻(NTC)的作用&#xff1a;抑制开机时的浪涌电流。防止开机瞬间产生的浪涌电流损坏后面的元件。 取值依据:根据对开机的脉冲电流&#xff08;浪涌电流&#xff09;小于多少A&#xff1f; 由,这个U是指最大输入电压&#xff0c;I为要求的浪涌电流。 NTC是负温度系数的热…

收银系统源码--商超水果生鲜店收银硬件要怎么选择?

新零售时代&#xff0c;越来越多的商家开始明白&#xff0c;除了要做好店铺定位、店面装潢和商品的设定&#xff0c;还要选购最适合店铺运营需求的收银机和硬件&#xff0c;好的收银机和收银系统可以帮助商家做好收支统计、库存管理、人员配置。客户服务等工作。现在的智能收银…

MySQL 索引使用(二)

本篇继续介绍有关索引的使用。 目录 一、SQL提示 二、单列索引和联合索引 三、覆盖索引 四、前缀索引 五、索引的使用原则 一、SQL提示 我们在使用索引来进行查询时&#xff0c;很有可能会出现一个字段中包含多个索引的情况&#xff0c;例如这里有一个name字段&#xff0c…

从零开始学习Slam-旋转矩阵旋转向量四元组(二)

本文参考&#xff1a;计算机视觉life 仅作笔记用 书接上回&#xff0c;上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点&#xff1a; 本着绕谁谁不变的变则 假设绕z轴旋转θ&#xff0c;旋转矩阵为&#xff1a; 再回顾一下旋转向量的表示以及这个基本记不…

SpringCloud如何实现SSO单点登录?

目录 一、SpringCloud框架介绍 二、什么是SSO单点登录 三、单点登录的必要性 四、SpringCloud如何实现SSO单点登录 一、SpringCloud框架介绍 Spring Cloud是一个基于Spring Boot的微服务架构开发工具集&#xff0c;它整合了多种微服务解决方案&#xff0c;如服务发现、配置…

SpringSecurity6从入门到实战之Filter过滤器回顾

SpringSecurity6从入门到实战之Filter过滤器回顾 如果没有SpringSecurity这个框架,我们应该通过什么去实现客户端向服务端发送请求时,先检查用户是否登录,登录了才能访问.否则重定向到登录页面 流程图如下 官方文档&#xff1a;https://docs.spring.io/spring-security/referen…

Ubuntu (18.04) _Mysql (8.0.X)设置密码强度

首先 查看是否有密码强度插件&#xff1a; SHOW PLUGINS; 如果没有&#xff0c;则安装 install plugin validate_password soname validate_password.so; 再次查看,会看到密码强度插件已开 其次 查看密码强度具体配置 show variables like validate_password%; validate…

echart扩展插件词云echarts-wordcloud

echart扩展插件词云echarts-wordcloud 一、效果图二、主要代码 一、效果图 二、主要代码 // 安装插件 npm i echarts-wordcloud -Simport * as echarts from echarts; import echarts-wordcloud; //下载插件echarts-wordcloud import wordcloudBg from /components/wordcloudB…

uniapp实现图片上传——支持APP、微信小程序

uniapp实现图片、视频上传 文章目录 uniapp实现图片、视频上传效果图组件templatejs 使用 相关文档&#xff1a; 结合 uView 插件 uni.uploadFile 实现 u-upload uploadfile 效果图 组件 简单封装&#xff0c;还有很多属性…&#xff0c;自定义样式等…根据个人所需调整 te…