Python数据预处理时缺失值的不同处理方式总结
作者:Python 发布时间:2022-02-14 22:58:25
在使用python做数据分析的时候,经常需要先对数据做统一化的处理,缺失值的处理是经常会使用到的。
一般情况下,缺失值的处理要么是删除缺失数据所在的行,要么就是对缺失的单元格数据进行填充。
今天介绍的是使用差补法/均值/固定值等不同的方式完成数据填充从而保证数据的完整性!
这里采用的还是pandas模块的DataFrame数据对象来做数据处理,因此,没有pandas的话使用pip的方式安装一下即可。
pip install pandas
下面是我们需要处理的源数据,由于是本地测试数据,数据量比较小。
使用pandas模块的read_excel函数将源数据全部读取出来返回DataFrame对象。
# Importing the pandas module and giving it the alias pd.
import pandas as pd
# Reading the excel file and storing it in a dataframe.
data_frame = pd.read_excel('D:/test-data-work/data.xlsx')
# Printing the dataframe.
print(data_frame)
# 姓名 年龄 班级 成绩 表现
# 0 Python 集中营 10.0 1210.0 99.0 A
# 1 Python 集中营 11.0 1211.0 100.0 A
# 2 Python 集中营 12.0 1212.0 101.0 A
# 3 Python 集中营 13.0 1213.0 102.0 A
# 4 Python 集中营 14.0 1214.0 103.0 NaN
# 5 Python 集中营 15.0 1215.0 104.0 A
# 6 Python 集中营 16.0 1216.0 105.0 A
# 7 Python 集中营 17.0 NaN 106.0 A
# 8 Python 集中营 18.0 1218.0 NaN A
# 9 Python 集中营 19.0 1219.0 108.0 A
# 10 Python 集中营 NaN 1220.0 109.0 NaN
# 11 Python 集中营 NaN NaN 110.0 A
# 12 Python 集中营 NaN 1222.0 NaN A
# 13 Python 集中营 23.0 1223.0 112.0 A
# 14 Python 集中营 24.0 1224.0 113.0 A
# 15 Python 集中营 25.0 NaN NaN NaN
# 16 Python 集中营 NaN 1226.0 115.0 A
# 17 Python 集中营 27.0 1227.0 NaN A
# 18 Python 集中营 10.0 1210.0 99.0 NaN
源数据已经读取完成了,接下来使用四种常见的缺失值的处理方式来进行批量的数据填充。
1. 固定值填充
固定值填充也是一种比较简单并且常用的填充方式,只需要给某个列填充自己想要填充的值即可。
这里我们把'表现'这一个列的空值全部填充成'B',fillna函数就是填充空值的意思。
# Replacing all the NaN values in the column '表现' with the value 'B'.
data_frame['表现'] = data_frame['表现'].fillna('B')
# Printing the dataframe.
print(data_frame)
# 姓名 年龄 班级 成绩 表现
# 0 Python 集中营 10.0 1210.0 99.0 A
# 1 Python 集中营 11.0 1211.0 100.0 A
# 2 Python 集中营 12.0 1212.0 101.0 A
# 3 Python 集中营 13.0 1213.0 102.0 A
# 4 Python 集中营 14.0 1214.0 103.0 B
# 5 Python 集中营 15.0 1215.0 104.0 A
# 6 Python 集中营 16.0 1216.0 105.0 A
# 7 Python 集中营 17.0 NaN 106.0 A
# 8 Python 集中营 18.0 1218.0 NaN A
# 9 Python 集中营 19.0 1219.0 108.0 A
# 10 Python 集中营 NaN 1220.0 109.0 B
# 11 Python 集中营 NaN NaN 110.0 A
# 12 Python 集中营 NaN 1222.0 NaN A
# 13 Python 集中营 23.0 1223.0 112.0 A
# 14 Python 集中营 24.0 1224.0 113.0 A
# 15 Python 集中营 25.0 NaN NaN B
# 16 Python 集中营 NaN 1226.0 115.0 A
# 17 Python 集中营 27.0 1227.0 NaN A
# 18 Python 集中营 10.0 1210.0 99.0 B
2. 均值填充
均值填充就是将缺失值所在列的数据进行一次均值计算,计算出结果后再填充到缺失值所在的单元格上面。
使用均值填充的前提是这一列的数据可以进行均值计算,比如'成绩'这一列都是数字可以使用mean函数做均值计算。
# Replacing all the NaN values in the column '成绩' with the mean of the column '成绩'.
data_frame['成绩'] = data_frame['成绩'].fillna(data_frame['成绩'].mean())
# It's printing the dataframe.
print(data_frame)
# 姓名 年龄 班级 成绩 表现
# 0 Python 集中营 10.0 1210.0 99.000000 A
# 1 Python 集中营 11.0 1211.0 100.000000 A
# 2 Python 集中营 12.0 1212.0 101.000000 A
# 3 Python 集中营 13.0 1213.0 102.000000 A
# 4 Python 集中营 14.0 1214.0 103.000000 B
# 5 Python 集中营 15.0 1215.0 104.000000 A
# 6 Python 集中营 16.0 1216.0 105.000000 A
# 7 Python 集中营 17.0 NaN 106.000000 A
# 8 Python 集中营 18.0 1218.0 105.733333 A
# 9 Python 集中营 19.0 1219.0 108.000000 A
# 10 Python 集中营 NaN 1220.0 109.000000 B
# 11 Python 集中营 NaN NaN 110.000000 A
# 12 Python 集中营 NaN 1222.0 105.733333 A
# 13 Python 集中营 23.0 1223.0 112.000000 A
# 14 Python 集中营 24.0 1224.0 113.000000 A
# 15 Python 集中营 25.0 NaN 105.733333 B
# 16 Python 集中营 NaN 1226.0 115.000000 A
# 17 Python 集中营 27.0 1227.0 105.733333 A
# 18 Python 集中营 10.0 1210.0 99.000000 B
可以发现计算出的均值是105.733333,已经都填充到'成绩'这一列的缺失值上面了。
3. 中位数填充
中位数填充和均值填充差不多是一样的,不同的是使用median函数来计算缺失值所在列的中位数。
# Replacing all the NaN values in the column '年龄' with the median of the column '年龄'.
data_frame['年龄'] = data_frame['年龄'].fillna(data_frame['年龄'].median())
# It's printing the dataframe.
print(data_frame)
# 姓名 年龄 班级 成绩 表现
# 0 Python 集中营 10.0 1210.0 99.000000 A
# 1 Python 集中营 11.0 1211.0 100.000000 A
# 2 Python 集中营 12.0 1212.0 101.000000 A
# 3 Python 集中营 13.0 1213.0 102.000000 A
# 4 Python 集中营 14.0 1214.0 103.000000 B
# 5 Python 集中营 15.0 1215.0 104.000000 A
# 6 Python 集中营 16.0 1216.0 105.000000 A
# 7 Python 集中营 17.0 NaN 106.000000 A
# 8 Python 集中营 18.0 1218.0 105.733333 A
# 9 Python 集中营 19.0 1219.0 108.000000 A
# 10 Python 集中营 16.0 1220.0 109.000000 B
# 11 Python 集中营 16.0 NaN 110.000000 A
# 12 Python 集中营 16.0 1222.0 105.733333 A
# 13 Python 集中营 23.0 1223.0 112.000000 A
# 14 Python 集中营 24.0 1224.0 113.000000 A
# 15 Python 集中营 25.0 NaN 105.733333 B
# 16 Python 集中营 16.0 1226.0 115.000000 A
# 17 Python 集中营 27.0 1227.0 105.733333 A
# 18 Python 集中营 10.0 1210.0 99.000000 B
4. 插补法填充
差补法填充可以根据该列的上一个数据和下一个数据得到该单元格需要插入的数据是多少。
比如:上一个班级是1220,下一个班级是1222,那么该单元格需要插入的数据应该是1221。
# Replacing all the NaN values in the column '班级' with the interpolated values of the column '班级'.
data_frame['班级'] = data_frame['班级'].interpolate()
# It's printing the dataframe.
print(data_frame)
# 姓名 年龄 班级 成绩 表现
# 0 Python 集中营 10.0 1210.0 99.000000 A
# 1 Python 集中营 11.0 1211.0 100.000000 A
# 2 Python 集中营 12.0 1212.0 101.000000 A
# 3 Python 集中营 13.0 1213.0 102.000000 A
# 4 Python 集中营 14.0 1214.0 103.000000 B
# 5 Python 集中营 15.0 1215.0 104.000000 A
# 6 Python 集中营 16.0 1216.0 105.000000 A
# 7 Python 集中营 17.0 1217.0 106.000000 A
# 8 Python 集中营 18.0 1218.0 105.733333 A
# 9 Python 集中营 19.0 1219.0 108.000000 A
# 10 Python 集中营 16.0 1220.0 109.000000 B
# 11 Python 集中营 16.0 1221.0 110.000000 A
# 12 Python 集中营 16.0 1222.0 105.733333 A
# 13 Python 集中营 23.0 1223.0 112.000000 A
# 14 Python 集中营 24.0 1224.0 113.000000 A
# 15 Python 集中营 25.0 1225.0 105.733333 B
# 16 Python 集中营 16.0 1226.0 115.000000 A
# 17 Python 集中营 27.0 1227.0 105.733333 A
# 18 Python 集中营 10.0 1210.0 99.000000 B
来源:https://blog.csdn.net/chengxuyuan_110/article/details/128400345
猜你喜欢
- 假设要生成一千万个随机数,常规的做法如下:var numbers = [];for (var&nbs
- URL完全匹配(具体的url)/indexURL模糊匹配(你根本就不知道index后面是什么,它根本不会返回参数)/index/\dURL带
- 使用select @@identity 得到刚插入数据的ID1.适用于所有 ADO 版本<%Dim loConn, 
- 本文实例讲述了Python 进程操作之进程间通过队列共享数据,队列Queue。分享给大家供大家参考,具体如下:队列中的数据是放在内存中的,可
- 依赖环境本篇文章所依赖的python 环境如下:计算机网络应用体系结构,一般有以下几种:C/S架构: 也称为客户端/客户端架构。P2P架构:
- JavaScript Length 字符长度函数,在很多时间我们会用length函数了,因为你得前台判断一个用户输入
- 在本篇文章当中主要给大家深入介绍在 cpython 当中非常重要的一个数据结构 code object! 在上一篇文章 深入理解 pytho
- phpqrcode类库官网下载地址: https://sourceforge.net/projects/phpqrcode/1.我们先看看p
- oracle 的表空间实例详解查询表空间SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
- 前言:Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并
- 合成微缩效果前言图像中的模糊效果可以强烈影响被拍摄场景的感知,模糊在传达所需的尺寸和距离感方面起着重要作用。合成微缩 (miniature
- 有一个 Selenium 脚本(Python),它点击回复按钮使anonemail类出现。anonemail 类出现的时间各不相同。因此,我
- “ 使用python实现协议中常见的TCP长连接框架。”分析多了协议就会发现,很多的应用,
- 一、特效预览处理前处理后细节放大后二、程序原理将图片所在的 256 的灰度映射到相应的字符上面也就是 RGB 值转成相应的字符然
- 最新版本的Python发布了!今年夏天,Python 3.8发布beta版本,在2019年10月14日,第一个正式版本已准备就绪。现在,我们
- jscript 5.7 发布修复了不少ie javascript内存泄露的问题。但是leak依然存在。当我们频繁使用 setInterval
- 上一课:ACCESS入门教程:窗口和菜单的使用向导简介 这一课我们要建立一个客户订单管理数据库,这个数据库将用ACCESS提供的数据库向导来
- 在Python语言中最常见的括号有三种,分别是:小括号()、中括号[]、花括号{};其作用也不相同,分别用来代表不同的Python基本内置数
- 今天无意在坛子里看到这样一个求救帖(这里),看了一下,感觉问题比较好解决。但是问题背后的问题却引起了我的反思。把他的页面整理一下看看(为了便
- 前言很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵、准确率、精确率、