[黑马程序员Pandas教程]——Pandas缺失值处理

目录:

  1. 学习目标
  2. 空值和缺失值
  3. 查看缺失值
    1. 加载数据并通过info函数初步查看缺失值情况
    2. df.isnull().sum()空值数量统计
    3. Missingno库对缺失值的情况进行可视化探查
      1. 安装missingno库
      2. missingno.bar(df)缺失值数量可视化
      3. missingno.matrix(df)缺失值位置的可视化
      4. missingno.heatmap(df)缺失值之间相关性可视化
  4. 缺失值的处理
    1. dropna删除缺失值
    2. fillna固定值填充缺失值
    3. fillna前后值填充缺失值
    4. interpolate线性插值
  5. 总结:
  6. 项目地址

1.学习目标

  • 知道空值和缺失值的区别以及缺失值的影响

  • 知道如何查看数据集缺失值情况的方法

  • 知道缺失值处理的办法

 2.空值和缺失值

  • 在Pandas中空值和缺失值是有区别的,缺失值包含了空值
  • 好多数据集都含缺失数据。缺失数据有多重表现形式

    • 数据库中,缺失数据表示为NULL

    • 在某些编程语言中用NANone表示

    • 缺失值也可能是空字符串''或数值 0

    • 在Pandas中使用NaN表示缺失值

      • Pandas中的NaN值来自Numpy库,Numpy中缺失值有几种表示形式:NaN,NAN,nan,他们都一样

    • 除了Pandas中的空值以外,上述类型的缺失值都可以使用replace函数统一替换为NaN

  • NaN表示空值

    • NaN是pandas中的特殊的数据结构,来源于numpy包的特殊数据结构

    • NaN毫无意义

      • NaN不等于0

      • 也不等于空字符串

      • 更不等于布尔值False

      • 并且两个NaN也不相等

# 使JupyterNotebook单个cell可以有多个输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'from numpy import NaN,NAN,nan# 缺失值和其它类型的数据不同,它毫无意义,NaN不等于0,也不等于空字符串
NaN==True
NaN==False
NaN==0
NaN==''
NaN==None# 两个NaN也不相等
NaN==NaN
NaN==nan
NaN==NAN
nan==NAN

 3.查看缺失值

加载数据并通过info函数初步查看缺失值情况
  • 加载印度城市空气质量数据集,并初步查探缺失值

import pandas as pd# 加载印度城市空气质量数据集
# index_col='Date' 指定Date列作为索引列
# parse_dates=True 将Date列中的数据解析为时间类型
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')
print(city_day)
print(city_day.info())
  •  isnull函数和notnull函数判断是否存在空值
import pandas as pd# 加载印度城市空气质量数据集
# index_col='Date' 指定Date列作为索引列
# parse_dates=True 将Date列中的数据解析为时间类型
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 空值返回True
print(city_day.isnull())
print(city_day['PM2.5'].isnull())
  •  isnull的返回值中存在True,`any()`就返回True
import pandas as pd# 加载印度城市空气质量数据集
# index_col='Date' 指定Date列作为索引列
# parse_dates=True 将Date列中的数据解析为时间类型
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')print(city_day.isnull().any())
print(city_day.isnull().any().any())
print(city_day['PM2.5'].isnull().any())
  • notnull函数和notna函数相同,判断是否存在非空值;与isnull函数对应,返回结果正好相反

import pandas as pd# 加载印度城市空气质量数据集
# index_col='Date' 指定Date列作为索引列
# parse_dates=True 将Date列中的数据解析为时间类型
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 空值返回False
print(city_day.notna())
print(city_day['PM2.5'].notna())

 

df.isnull().sum()空值数量统计
import pandas as pd# 加载印度城市空气质量数据集
# index_col='Date' 指定Date列作为索引列
# parse_dates=True 将Date列中的数据解析为时间类型
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 空值数量统计
print(city_day.isnull().sum())
print(city_day['PM2.5'].isnull().sum())
# 非空值数量统计
print(city_day.notnull().sum())
print(city_day['PM2.5'].notnull().sum())
Missingno库对缺失值的情况进行可视化探查
  • 可以使用第三方库Missingno来对缺失值进行可视化
安装missingno库
  • pip install missingno
missingno.bar(df)缺失值数量可视化
# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')
# 查看缺失值数量
city_day.isnull().sum()
# 查看非缺失值数量
city_day.notna().sum()
# 可视化查看缺失值数量情况
msno.bar(city_day)
plt.show()
missingno.matrix(df)缺失值位置的可视化
  • `missingno.matrix(df)` 可以快速直观的查看缺失值的分布情况
# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')msno.matrix(city_day)
plt.show()
# 对数据集进行随机取样后再查看数据缺失情况
msno.matrix(city_day.sample(100))
plt.show()
missingno.heatmap(df)缺失值之间相关性可视化
# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')msno.heatmap(city_day)
plt.show()

**返回结果如下**:相关性取值 0 不相关,1强相关,-1强负相关

4.缺失值的处理

  • 缺失值的处理方法有以下几种方式:
    • 删除缺失值:删除缺失值会损失信息,并不推荐删除,当缺失数据占比较低的时,或可以忽略相关性时,可以尝试使用删除缺失值
    • 填充缺失值:填充缺失值是指用一个估算的值来去替代缺失数
      • 平均值、中位数
      • 前后值填充,数据呈现顺序变化的时候可以使用缺失值前边或后边的值进行填充
  • 线性插值:假定数据点之间存在严格的线性关系,并利用相邻数据点中的非缺失值来计算缺失数据点的值
dropna删除缺失值 

使用`dropna`函数来删除空值,具体用法如下

# 函数用法
df.dropna(axis=0, how='any', inplace=True, subset=['列名',...],thresh=10
)df.drop() # 按列删除
  • dropna函数参数解释

    • axis=0

      • 可选参数 ,默认为0按行删

      • 0, or 'index':删除包含丢失值的行

      • 1, or 'columns':删除包含丢失值的列

    • how='any'

      • 可选参数,默认为any

      • any: 如果存在NA值,则删除该行或列

      • all: 如果所有值都是NA,则删除该行或列

    • inplace=False

      • 可选参数,不建议使用这个参数

      • 默认False, 不对原数据集进行修改

      • inplce=True,对原数据集进行修改

    • subset接收一个列表

      • 可选参数,不与thresh参数一起使用

      • 接收一个列表,列表中的元素为列名: 对特定的列进行缺失值删除处理

    • thresh=n

      • 可选参数

      • 参数值为int类型,按行去除NaN值,去除NaN值后该行剩余数值的数量(列数)大于等于n,便保留这一行

  • 示例代码如下

# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 构造示例数据集
city_day2 = city_day.sample(n=10, random_state=5)
print(city_day2)
msno.matrix(city_day2)
plt.show()city_day2 = city_day2.dropna(how='any', subset=['PM10'])
print(city_day2)
msno.matrix(city_day2.dropna(how='any', subset=['PM10']))
plt.show()
 fillna固定值填充缺失值
  • 用平均值填充PM2.5的缺失值

# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 构造示例数据集
city_day3 = city_day.copy()
msno.matrix(city_day3)
plt.show()# 计算PM2.5平均值
pm25_mean = city_day3['PM2.5'].mean()
print(pm25_mean)# fillna函数填充缺失值,将返回值赋值给原来的列
city_day3['PM2.5'] = city_day3['PM2.5'].fillna(pm25_mean)# 查看填充完缺失值的数据集
msno.matrix(city_day3)
plt.show()
 fillna前后值填充缺失值

时序数据在某一列值的变化往往有一定线性规律,绝大多数的时序数据,具体的列值随着时间的变化而变化,所以对于有时序的行数据缺失值处理可以使用上一个非空值或下一个非空值填充

印度城市空气质量数据明显就是一个时序数据集,空气中的各种成分会随着时间变化而变化,不会出现特别大的急剧变化

  • 使用上一个非空值(参数method='ffill')填充Xylene(二甲苯)的空值

# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 构造示例数据集
city_day3 = city_day.copy()# 用上一个非空值填充并赋值指定列
city_day3['Xylene'] = city_day3['Xylene'].fillna(method='ffill')
msno.matrix(city_day3)
plt.show()
  • 使用下一个非空值(参数method='ffill')填充整个数据集的空值

# 导包
import pandas as pd
import missingno as msno
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 构造示例数据集
city_day3 = city_day.copy()city_day3 = city_day3.fillna(method='bfill')
msno.matrix(city_day3)
plt.show()
interpolate线性插值

绝大多数的时序数据,具体的列值随着时间的变化而变化。 因此,除了使用bfill和ffill进行插补以外还可以使用线性插值法:它假定数据点之间存在严格的线性关系,并利用相邻数据点中的非缺失值来计算缺失数据点的值。

  • 使用df.interpolate(limit_direction="both") 对缺失数据进行线性填充

# 导包
import pandas as pd
import matplotlib.pyplot as plt# 加载数据
city_day = pd.read_csv('../datas/data_set/city_day.csv', parse_dates=True, index_col='Date')# 拷贝数据集
city_day4 = city_day.copy()
# 线性插值填充,并赋值
city_day4 = city_day4.interpolate(limit_direction='both')
# 画图查看
city_day4['PM2.5'][50:65].plot()
plt.show()
city_day['PM2.5'][50:65].plot()
plt.show()

5.总结:

  • 缺失值会影响分析计算的结果,这个结果又要用来指导生产经营,所以要重视缺失值
  • 空值仅指Pandas中的空值类型,比如`NaN`
  • 缺失值包含空值,也有可能是空字符串、数字0、False或None等
  • 不是空值的缺失值可以通过`replace`函数先替换为`NaN`空值,之后再按空值进行处理
  • 查看空值
    • `df.info()` 可以查看数据集每一列非空值的数量
    • `isnull` & `notnull`函数 判断是否存在空值
    • `df.isnull().sum()` 统计空值数量
    • `missingno`库可以对空值进行可视化探查
      • `missingno.matrix(df)` 查看缺失值的位置
      • `missingno.heatmap(df)` 查看缺失值之间的相关性
  • 缺失值的处理
  • `df.dropna()` 删除缺失值
  • `df.fillna(具体值)` 将缺失值填充为具体指
  • `df.fillna(method='ffill')` 使用上一个非空值进行填充
  • `df.fillna(method='bfill')` 使用下一个非空值进行填充
  • `df.interpolate(limit_direction='both')` 线性插值:假定数据点之间存在严格的线性关系,并利用相邻数据点中的非缺失值来计算缺失数据点的值

 6.项目地址

Python: 66666666666666 - Gitee.com

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

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

相关文章

线扫相机DALSA软件开发套件有哪些

Win10和Win7系统完整SDK目录截图: Sapera Configuration 缓存与内存管理,以及通信端口配置工具,部分功能等效于Detection(查找相机)内的Settings。 Sapera Log Viewer 打开Log Viewer后会显示之前发生过的所有与Sapera LT软件有关的运行信息…

15套前端经典实战项目大合集,小白练手必备实战项目

15套前端经典实战项目大合集,悄悄练习,你会惊艳所有人。 今日我以内卷为荣,明日内卷以我为荣,不管学习哪门语言都要做出实际的东西来,这个实际的东西就是项目。 这里整理了15前端经典实战项目,每套都有完…

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件…

使用CMake引入第三方so库及头文件并调用头文件声明的函数

首先,要调用别人的so库和头文件,我们自己项目中需要有NDK。 因为只有C++代码才能直接调用C++代码,也就是头文件和so库的函数。 其次,就是要想办法把头文件,so库和项目中的NDK关联起来,然后作为一个整体,生成一个jni,供Java层调用。 最后,二者的关联是通过CMake完成的…

软件测试/测试开发丨接口测试Mock实战练习学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27857 一、Rewrite 1.1、Rewrite 原理 1.2、Rewrite 实战 Tools → Rewrite 勾选 Enable Rewrite 点击下方 Add 按钮新建一个重写的规则 在右侧编辑重…

使用PCtoLCD2002提取字模

“模式”---“字符模式” LCD显示,汉字使用宋体还是比较好的,16*16是长、宽都是16个像素显示。

Spark Core

Spark Core 本文来自 B站 黑马程序员 - Spark教程 :原地址 第一章 RDD详解 1.1 为什么需要RDD 分布式计算需要 分区控制shuffle控制数据存储、序列化、发送数据计算API等一系列功能 这些功能,不能简单的通过Python内置的本地集合对象(如…

gitlab 设置 分支只读

一,设置master分支只读, 并且只有Maintainers 拥有合并权限。 二,设置成员权限 改为developer 三,邀请成员 点击右上角 Invite Members

AVS3:双向梯度修正BGC

双向梯度修正(Bi-directional Gradient Correction,BGC)是利用双向参考块间的差值对预测值进行修正的技术。 BGC仅用于双向预测CU,设两个方向得到的单向预测值分别为pred0和pred1,修正前的双向预测值为predBI&#xf…

web —— html

Web —— css基础 1. HTML2. 基本HTML结构3. HTML常用标签3.1 文本相关标签3.2 HTML图像标签3.3 HTML超链接标签3.4 HTML表,单3.4.1 HTML表格3.4.2 HTML表单,输入框(多选框,单选框)下拉框 3.5 HTML分区标签3.5.1 div标…

LeetCode-94. 二叉树的中序遍历(C++)

目录捏 一、题目描述二、示例与提示三、思路四、代码 一、题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 二、示例与提示 示例 1: 输入: root [1,null,2,3] 输出: [1,3,2] 示例 2: 输入&#xf…

大数据毕业设计选题推荐-营业厅营业效能监控平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

初识Java 17-2 反射

目录 转型前检查 构建例子:生成层次结构 优化Creator:使用类字面量 优化PetCounter:动态验证类型 更通用的递归计数 注册工厂 本笔记参考自: 《On Java 中文版》 转型前检查 当我们使用传统的类型转换,例如&…

支付卡行业(PCI)PIN安全要求和测试程序 7个控制目标、33个要求及规范性附录ABC 密钥注入-PCI认证-安全行业基础篇4

概述 用于在ATM和POS终端进行在线和离线支付卡交易处理期间,对个人身份号码(PIN)数据进行安全管理、处理和传输。 该标准具体包括 7 个控制目标和 33 个安全要求, 标准的结构分为标准主体部分,标准附录(N…

windows查看端口号占用,并杀死进程

1、查看所有运行的端口: netstat -ano 2、查看被占用端口对应的 PID netstat -aon|findstr "8081" 回车执行该命令,最后一串数字就是 PID进程号, 这里是 19232。 3、查看指定 PID 的进程 tasklist|findstr "19232" 回车执行该…

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器,允许我们链接和编排不同的模块。可以常…

【今日文章】:如何用css 实现星空效果

【今日文章】:如何用css 实现星空效果 需求实现tips: 需求 用CSS 实现星空效果的需求: 屏幕上有“星星”,且向上移动。移动的时候,动画效果要连贯,不能出现闪一下的样子。 实现 这里我们需要知道,“星星”是…

阿里云服务器云盘性能IOPS和吞吐量说明SSD、ESSD和高效

阿里云服务器系统盘或数据盘支持多种云盘类型,如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等,阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

电脑发热发烫,具体硬件温度达到多少度才算异常?

环境: 联想E14 问题描述: 电脑发热发烫,具体硬件温度达到多少度才算异常? 解决方案: 电脑硬件的温度正常范围会因设备类型和使用的具体硬件而有所不同。一般来说,以下是各种硬件的正常温度范围: CPU:正…

软件设计模式的意义

软件设计模式的意义 所有开发人员都应该接触过软件设计模式这个概念,看过《设计模式-可复用的对象软件的基础》这本书,在面试中都被问过: 你用过哪些设计模式这种问题。但很大可能也就仅此而已了。 为什么好像只能从框架中找到设计模式的应用…