越洗越黑”的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 pd

df = 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 pd

df = 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.mfbz.cn/a/665106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CUDA学习(1)

(一)CUDA简介 CUDA,全称Compute Unified Device Architecture,是由NVIDIA公司开发的一种计算平台和编程模型。它允许软件开发者和程序员使用NVIDIA的图形处理单元(GPU)来进行非常复杂的计算任务。简单来说,CUDA让普通…

安全风险 - 检测设备是否为模拟器

在很多安全机构的检测中,关于模拟器的运行环境一般也会做监听处理,有的可能允许执行但是会提示用户,有的可能直接禁止在模拟器上运行我方APP 如何判断当前 app 是运行在Android真机,还是运行在模拟器? 可能做 Framework 的朋友思…

DKTCDR:Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation

Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation IEEE(CCF B.SCI 1)-Guoshuai Zhao, Xiaolong Zhang, Hao Tang, Jialie Shen, and Xueming Qian-2024 思路 在CDR中,构建连接两个域的桥梁是实现跨域推荐的基础。然而现在的CDR方法往往在连接两个域时忽…

Usage - hackthebox

简介 靶场:hackmyvm 靶机:Usage(10.10.11.18) 难度:Easy 靶机链接:https://app.hackthebox.com/machines/Usage 攻击机1:ubuntu22.04 (10.10.16.21) 攻击机2:windows11(10.10.14.33) 扫描 nmap起手 nmap -sT …

身份认证与口令攻击

身份认证与口令攻击 身份认证身份认证的五种方式口令认证静态口令动态口令(一次性口令)动态口令分类 密码学认证一次性口令认证S/KEY协议改进的S/KEY协议 其于共享密钥的认证 口令行为规律和口令猜测口令规律口令猜测 口令破解操作系统口令破解Windows密码存储机制Windows密码破…

整合框架(spring...) 统一异常处理

1、 我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理。 附加:创建封装错误状态码和错误消息VO 代码如下: Result import io.swagger.v3.oas.annotations.media.Schema; impo…

数组的应用-24点游戏

目录 24点游戏 游戏规则 游戏主要分为三部分 电脑出牌 用户输入算式 电脑判断胜负 总结 24点游戏 游戏规则: 54张扑克抽出大小王,剩余52张用来用于游戏;每一轮从52张牌中随机抽出4张;玩家运用加,减&#xff0…

Java集合【超详细】

文章目录 一、集合框架1.1 概述1.2 数组和集合的区别1.3 Java集合框架体系1.4 数据结构1.4.1 栈、队列、数组、队列1.4.2 二叉树【理解】1.4.3 二叉查找树【理解】1.4.4 平衡二叉树【理解】1.4.5 红黑树【理解】 1.5 泛型 二、Collection集合2.1 Collection 集合概述和使用【应…

统计各个商品今年销售额与去年销售额的增长率及排名变化

文章目录 测试数据需求说明需求实现分步解析 测试数据 -- 创建商品表 DROP TABLE IF EXISTS products; CREATE TABLE products (product_id INT,product_name STRING );INSERT INTO products VALUES (1, Product A), (2, Product B), (3, Product C), (4, Product D), (5, Pro…

VIO System 丨适用于控制器开发前期的测试系统

VIO综述 嵌入式软件的HIL测试需要复杂的测试系统及完整的ECU硬件,这导致通常只能在开发流程的后期阶段进行测试。全新推出的低成本解决方案VIO System,使得在开发前期不仅可以进行总线通讯测试,也可以同时进行I/O信号测试。 该系统旨在通过…

css-Ant-Menu 导航菜单更改为左侧列表行选中

1.Ant-Menu导航菜单 导航菜单是一个网站的灵魂&#xff0c;用户依赖导航在各个页面中进行跳转。一般分为顶部导航和侧边导航&#xff0c;顶部导航提供全局性的类目和功能&#xff0c;侧边导航提供多级结构来收纳和排列网站架构。 2.具体代码 html <!-- 左侧切换 --><…

【计算Nei遗传距离】

报错 Warning message: In adegenet::df2genind(t(x), sep sep, ...) : Markers with no scored alleles have been removed 原因&#xff1a; 直接用plink转换为VCF&#xff0c;丢失了等位基因分型&#xff08;REF ALT&#xff09; &#xff08;plink编码的规则&…

成绩发布小程序哪个好用?

大家好&#xff0c;今天我要来跟大家分享一个超级实用的小秘密——易查分小程序&#xff01;作为老师&#xff0c;你是不是还在为发放成绩而头疼&#xff1f;是不是还在为通知家长而烦恼&#xff1f;别急&#xff0c;易查分小程序来帮你啦&#xff01; 易查分简直是老师们的贴心…

ESP8266使用AT指令登陆新版OneNET平台进行固定数据上报

登陆OneNET进开发者中心 创建产品 创建云平台产品 产品类别和智能化方式选择 产品名称和城市自定义选择&#xff0c;框选部分参照下图&#xff0c;开发方案选标准方案时平台会预置标准物模型和App控制面板&#xff0c;选自定义方案用户可自行定义物模型和App控制面板&…

李廉洋:5.31黄金原油末日砸盘,美盘分析及策略。

黄金消息面分析&#xff1a;过去几天股市的抛售也是金属市场的利多因素。美国商务部将第一季度GDP预期从1.6%下修至1.3%后&#xff0c;美国国债收益率下降。同时&#xff0c;美国劳工部公布&#xff0c;上周首次申请失业救济人数从前一周修正后的21.6万人上升至21.9万人。综合来…

【代码随想录——回溯算法——四周目】

1.重新安排行程 1.1 我的代码&#xff0c;超时通不过 var (used []boolpath []stringres []stringisFind bool )func findItinerary(tickets [][]string) []string {sortTickets(tickets)res make([]string, len(tickets)1)path make([]string, 0)used make([]bool,…

我与C++的爱恋:vector的使用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​ 文章目录 一、vector的简单介绍二、vector的使用构造函数遍历容器对容器的操作vector 的增删查改 一、vector的简单介绍 vector是表示可变大小数组的序列容器 就像数组…

并查集拓展(扩展域并查集)

事实证明&#xff0c;扩展域并查集应该在带权并查集前面讲的&#xff0c;因为比较好理解&#xff0c;而且回过头看带权并查集可能也会更轻松一些。 https://www.luogu.com.cn/problem/P1892https://www.luogu.com.cn/problem/P1892 题目描述 现在有 &#x1d45b; 个人&…

VBA语言専攻每周通知20240531

通知20240531 各位学员∶本周MF系列VBA技术资料增加616-620讲&#xff0c;T3学员看到通知后请免费领取,领取时间5月31日晚上19:00-6月1日晚上20:00。本次增加内容&#xff1a; MF616:创建具有间隔的计时器循环 MF617:计时器的计时与重置 MF618:列出单字符所有可能的排列组合…

怎么把图片大小调小?在线改图片大小的方法

怎么把比较大的图片压缩变小呢&#xff1f;在使用图片的时候&#xff0c;比较常见的一个问题就是图片太大导致无法正常上传&#xff0c;需要将图片处理到合适的大小之后&#xff0c;才可以正常在网上上传。现在一般调整图片大小多会通过使用在线改图片大小的在线工具来处理&…