[黑马程序员Pandas教程]——Pandas缺失值处理
目录:
- 学习目标
- 空值和缺失值
- 查看缺失值
- 加载数据并通过info函数初步查看缺失值情况
- df.isnull().sum()空值数量统计
- Missingno库对缺失值的情况进行可视化探查
- 安装missingno库
- missingno.bar(df)缺失值数量可视化
- missingno.matrix(df)缺失值位置的可视化
- missingno.heatmap(df)缺失值之间相关性可视化
- 缺失值的处理
- dropna删除缺失值
- fillna固定值填充缺失值
- fillna前后值填充缺失值
- interpolate线性插值
- 总结:
- 项目地址
1.学习目标
-
知道空值和缺失值的区别以及缺失值的影响
-
知道如何查看数据集缺失值情况的方法
-
知道缺失值处理的办法
2.空值和缺失值
- 在Pandas中空值和缺失值是有区别的,缺失值包含了空值
-
好多数据集都含缺失数据。缺失数据有多重表现形式
-
数据库中,缺失数据表示为
NULL -
在某些编程语言中用
NA或None表示 -
缺失值也可能是空字符串
''或数值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
相关文章:
[黑马程序员Pandas教程]——Pandas缺失值处理
目录: 学习目标空值和缺失值查看缺失值 加载数据并通过info函数初步查看缺失值情况df.isnull().sum()空值数量统计Missingno库对缺失值的情况进行可视化探查 安装missingno库missingno.bar(df)缺失值数量可视化missingno.matrix(df)缺失值位置的可视化missingno.he…...
Mysql进阶-视图篇
介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。…...
一种libuv实现websockets服务的解决方案
方法是libuv用多事件循环来驱动。说起来容易,做起来还是比下面的方法更容易: 上图是某位网友的方法代表子大部分网络资料。此方法对部署不友好,因为软件仓库提供的libwebsockets是不能用了。如何简化部署,利用好现有的软件仓库呢&…...
MobaXterm配置SSHTunnel
本地与远程服务器之间存在防火墙,防火墙只允许SSH端口通过,为访问远程服务器,我们可以借助MobaXterm来与SSH服务器建立隧道,使得防火墙外的用户能够访问远程服务器 配置 打开SSHTunnel 新建SSH tunnel 点击开启就生效了&…...
MySQL中的datetime和timestamp有什么区别
相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储服务器当前的时区. 而timesta…...
如何开发一个求职招聘小程序?详细步骤解析与教程
一、确定需求和功能 在开发求职招聘小程序之前,需要明确需求和功能。通过对市场和用户需求的调研和分析,确定小程序需要具备哪些功能,如职位发布、简历投递、在线沟通、面试安排等。 二、选择开发方式 求职招聘小程序的开发方式有多种选择…...
安克创新音频算法工程师(应届生)招聘
职位描述: 负责音频处理算法的研发和优化,包括但不限于噪声抑制、回声消除、声反馈抑制、音效、声纹、唤醒、指令词识别等。 持续跟进国际前沿技术方向,预研端侧可落地的音频技术,打造技术影响力。 对音频处理系统进行模拟和实验…...
Ubuntu 22.04.3 LTS中安装singularity
文章目录 概要背景知识什么是singularity ? 安装流程1. 安装Go2. 下载Singularity3. 编译Singularity源代码 4. 验证安装是否成功singularity的使用安装open structure 小结 概要 这里主要记录singularity的安装和使用,安装过程中会出现相关的错误,所以…...
NVM安装node后提示没有对应npm包(即:无法将“npm”项识别为 cmdlet、函数、脚本文件)
背景 windows11 node版本降低到v12.22.12后,执行:nvm -v npm -v npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 …...
路由器基础(十一):ACL 配置
访问控制列表 (Access Control List,ACL) 是目前使用最多的访问控制实现技术。访问控制列表是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk 等。访问控制列表可以分为基本访问控制列表和高级访问控制…...
【今日文章】:如何用css 实现星空效果
【今日文章】:如何用css 实现星空效果 需求实现tips: 需求 用CSS 实现星空效果的需求: 屏幕上有“星星”,且向上移动。移动的时候,动画效果要连贯,不能出现闪一下的样子。 实现 这里我们需要知道,“星星”是…...
HackTheBox-Starting Point--Tier 1---Three
文章目录 一 题目二 实验过程 一 题目 Tags Web、Cloud、Custom Applications、AWS、AWS、Reconnaissance、Web Site Structure Discovery、Bucket Enumeration、Arbitrary File Upload、Anonymous/Guest Access译文:Web、云、定制应用程序、AWS、AWS、侦察、网站…...
Linux Alsa声卡驱动(2):Machine驱动
一:Simple Card Simple Card是ASoC通用的machine driver,可支持大部分标准声卡。 驱动:kernel/sound/soc/generic/simple-card.c compatible = "simple-audio-card"; 1、设备树属性 (1)协议 属性协议格式描述simple-audio-card,format i2si2s标准格式right_j…...
某综合性能源集团绩效考核设计项目纪实
——设置分层分类的考核指标、建立多维度评价体系,增加考核结果信服力 【客户行业】能源行业 【问题类型】薪酬管理 【客户背景】 某综合性能源跨国集团是一家专注于能源加工行业的民营跨国企业,业务覆盖能源工程建设、高端装备制造、能源勘探开发、专…...
ubuntu18.04 通过创建服务实现开机自启, 启动指定脚本
下面是具体的操作过程 切换目录到root cd /root/ 新建一个脚本 vi myscript.sh 添加内容:设置指定网卡的ip地址 (这里根据自己需要修改) #!/bin/bash ifconfig enp0s3 10.20.60.113 赋予执行权限 chmod x myscript.sh 新建一个服务 vi /etc/systemd/system/myscr…...
Tomcat 9.0.x 源码编译
文章目录 一、克隆源码二、构建 Maven1)在项目根目录中新建 pom.xml 文件2)然后 Add Maven Projects 三、在目录中增加 home 目录四、增加启动配置五、其它问题1)控制台乱码解决 2)启动后访问 localhost:8080 报错解决 一、克隆源…...
基于SSM的旅游管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
多目标优化中的“latent action”是什么?
2020 NeurIPS 中的“latent action”: Our model defines latent action as a boundary that splits the region represented by a node into a high-performing and a low performing region. 这里的latent action代表一个边界(分类器)&…...
上海亚商投顾:三大指数小幅下跌 CPO、算力板块集体爆发
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指早间低开后震荡,午后一度拉升翻红,创业板指盘中跌近1%,随后探底回升跌…...
【C语法学习】19 -关闭和刷新文件
文章目录 1 关闭文件1.1 fclose()函数1.1.1 函数原型1.1.2 参数1.1.3 返回值 1.2 fcloseall()函数1.2.1 函数原型1.2.2 参数1.2.3 返回值 2 刷新文件2.1 缓冲区的概念2.2 缓冲区的刷新2.2.1 fflush()函数2.2.1.1 函数原型2.2.1.2 参数2.2.1.3 返回值 2.2.2 flushall()函数2.2.2…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
