Python数据预处理时缺失值的不同处理方式总结

 更新时间:2022年12月22日 08:15:23   作者:Python 集中营  
在使用python做数据分析的时候,经常需要先对数据做统一化的处理,缺失值的处理是经常会使用到的。今天介绍的是使用差补法/均值/固定值等不同的方式完成数据填充从而保证数据的完整性,感兴趣的可以了解一下

在使用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

到此这篇关于Python数据预处理时缺失值的不同处理方式总结的文章就介绍到这了,更多相关Python数据预处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python实现自动扫雷详解

    基于Python实现自动扫雷详解

    这篇文章主要介绍了如何利用Python+OpenCV实现了自动扫雷,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2022-01-01
  • python+selenium打印当前页面的titl和url方法

    python+selenium打印当前页面的titl和url方法

    今天小编就为大家分享一篇python+selenium打印当前页面的titl和url方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 初学python的操作难点总结(新手必看篇)

    初学python的操作难点总结(新手必看篇)

    下面小编就为大家带来一篇初学python的操作难点总结(新手必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Flask接口签名sign原理与实例代码浅析

    Flask接口签名sign原理与实例代码浅析

    这篇文章主要介绍了Flask接口签名sign原理与实例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • flask/django 动态查询表结构相同表名不同数据的Model实现方法

    flask/django 动态查询表结构相同表名不同数据的Model实现方法

    今天小编就为大家分享一篇flask/django 动态查询表结构相同表名不同数据的Model实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python3.7+selenium模拟淘宝登录功能的实现

    python3.7+selenium模拟淘宝登录功能的实现

    这篇文章主要介绍了python3.7+selenium模拟登录淘宝功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 浅析Python3中遍历目录的三种方法

    浅析Python3中遍历目录的三种方法

    在学习中,工作中,我们经常会说遍历一下当前目录咯,那么Python3中遍历目录的方法具体都有哪些呢并且如何操作呢,下面小编就来和大家简单聊聊吧
    2023-07-07
  • python调用pyaudio使用麦克风录制wav声音文件的教程

    python调用pyaudio使用麦克风录制wav声音文件的教程

    这篇文章主要介绍了python调用pyaudio使用麦克风录制wav声音文件的教程,详细的给大家介绍了pyaudio库的安装与使用,需要的朋友可以参考下
    2019-06-06
  • scrapy redis配置文件setting参数详解

    scrapy redis配置文件setting参数详解

    这篇文章主要介绍了scrapy redis配置文件setting参数详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python稀疏矩阵scipy.sparse包使用详解

    Python稀疏矩阵scipy.sparse包使用详解

    本文主要介绍了Python稀疏矩阵scipy.sparse包使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论