如何处理时间序列的缺失数据

您是否应该删除、插入或估算?

img

世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉:

df.info()

看到类似这样的内容:

img

大多数 ML 模型无法处理 NaN 或空值,因此如果您的特征或目标包含这些值,则在尝试将模型拟合到数据之前对它们进行适当处理非常重要。

在本文中,我将探讨处理时间序列数据集中的空值/缺失数据的 3 种简单方法。

1. 删除空值

这可能是处理缺失数据最简单、最直接的方法:将其删除。

# 删除所有列中的所有空值
df.dropna(inplace=True)

默认情况下,pandas 的dropna 函数会全面搜索(所有列)空值,并删除任何列中存在空值的行**。**但是,可以使用各种参数进行修改。

在本数据集中,请注意 NMHC(GT) 列只有 914 个非空值。因此,如果我们删除所有空值,我们的模型最终最多只能得到 914 行(可能更少)。这与原来的 9,357 行相比大幅下降!

通过指定列的子集 ,pandas 将仅删除数据框中特定列为空的行。

df.dropna(subset=['CO(GT)','PT08.S1(CO)'], inplace=True)

这样,我们可以对方法进行混合和搭配,在某些列中删除空值,并以不同的方式处理其他列。

您还可以通过将参数how设置为“all”来指定是否仅删除所有列都为空的行。how 的默认值为“any”。

2. 插值空值

填充空值的另一种简单方法是通过插值。Pandas 的 interpolate 方法默认使用线性插值。

线性插值基本上取空值前后的两个值,并在两者之间创建一条线。然后使用这条线来估计缺失数据点的值。Pandas**的插值方法假设每个数据点的间距相等。**如果您没有针对每个可能的时间戳设置一行,只要您有日期时间索引,就可以将插值方法设置为“时间”。这样,如果您有两行相隔 >1 个间隔(例如 >1 天或 1 小时),插值将考虑这个距离。

如果这是第一个索引,由于空值前面没有值,因此不会进行插值。

img

在这种情况下,插值很简单,因为在两个已知值的中间正好有 1 个空值。所有值都以 1 小时为间隔。索引 10 处的空值将只是前后值的平均值 (0.65)。

如果存在 2 个或更多连续的 NaN,则将根据它们与已知值之间的距离对它们进行插值。

**您可以通过limit**关键字参数设置要插入的连续 NaN 数量限制。如果有大量连续 NaN,您可能希望在某个插值点之后删除它们,因为*每次插值都会给算法带来不确定性。*插值越多 = 不确定性越大,尤其是在时间序列的情况下。

3. 归纳空值

我要介绍的最后一种方法是归纳法。归纳法本质上意味着用数据的平均值或中位数填充空值。

最简单的方法是使用 pandas 的 fillna 并取整列的中值。

df.fillna(df['CO(GT)'].median())

但对于时间序列,整个数据集的中值通常并不准确。时间序列数据通常具有季节性模式,使用情况会根据一天中的小时、星期几、月份等而变化。

对于这个例子,我决定使用该小时的中位数来估算 CO(GT) 列**。**

为了能够用中位数进行估算,我想出了自己的解决方案,因为没有直接的方法或库可以做到这一点(据我所知)。 我必须首先创建一个数据框,其中包含各个小时的所有中位数。

# 创建包含按小时分组的每列中位数的数据框
hour_df = pd.DataFrame(df.groupby([df.index.hour]).median())
hour_df.reset_index(inplace=True)

按小时对中位数进行分组的结果数据框。仅显示前 5 小时 + 3 列。

接下来,我创建了一个名为 get_hour_median 的函数。虽然我仅针对 CO(GT) 列展示了该函数,但我使该函数足够灵活,以便它可以处理任何列名。

def get_hour_median(hour,col_name):median = hour_df[hour_df['Datetime']==hour][col_name].values[0]return median

然后我使用 apply 和另一个自定义函数将此函数应用于 CO(GT) 列。

# 重置日期时间索引以便在下面的函数中更轻松地处理
df.reset_index(inplace=True)# 获取数据框行并返回中值(如果行为空),否则返回原始值。
def fill_with_hourly_median(row,col_name):if pd.isnull(row[col_name]):return get_hour_median(row['Datetime'].hour,col_name)else:return row[col_name]# 将 fill_with_hourly_median 应用于 CO(GT) 列
df['CO(GT)'] = df.apply(fill_with_hourly_median, axis=1, col_name='CO(GT)')

CO(GT) 列现在应该填写相应小时的中值而不是 NaN。

选择哪一个?

很多时候,您会针对不同的列使用不同方法的组合。例如,由于线性插值不会填充列中的第一个值,因此如果数据框开头有空行,则可以在数据框中间的行被插值后删除这些行。

如果您有大量数据,且空值不多,则删除几行不会产生太大影响。在这种情况下,删除通常是我的首选方法,因为我将输入模型的所有数据都是实际数据。

对于数据集中偶尔出现的小间隙(1-2 行缺失),我通常会使用插值法。但是,如果间隙较大,且存在大量连续的空值,我会考虑使用中位数,直到达到某个阈值(>6-10,但可能取决于数据的粒度和模式的一致性),之后我会开始删除行。

如您所见,虽然处理缺失数据是一种常见现象,但处理方法有很多考虑因素。我提到的方法绝不是唯一的方法,但仅使用这 3 种方法就可以做很多事情。

我建议 彻底探索您的时间序列数据,方法是绘制图表并确定零点在哪里、差距是大还是小以及存在哪些类型的季节性模式。随着时间和实践,您将对如何最好地处理数据中的差距有更好的直觉。

参考

  1. Vito,Saverio. (2016). Air Quality. UCI Machine Learning Repository. https://doi.org/10.24432/C59K5F.

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

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

相关文章

Java-MySql:JDBC

目录 JDBC概述 JDBC搭建 1、导入mysql开发商提供的jar包 2、注册驱动 3、与数据库连接 注解: Statement: 代码 运行 PreparedStatement: 代码 运行 PreparedStatement和Statement Statement 增 代码 运行 删 代码 运…

九、图形化脚本

多年来, shell脚本一直都被认为是枯燥乏味的。但如果你准备在图形化环境中运行脚本时,就未必如此了。有很多与脚本用户交互的方式并不依赖read和echo语句。 9.1 创建文本菜单 创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户…

AI遇上遥感,未来会怎样?

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

基于MetaGPT构建LLM多智能体

前言 你好,我是GISer Liu,在上一篇文章中,我们用了两万多字详细拆解了单个Agent的组成,并通过Github Trending订阅智能体理解MetaGPT框架的订阅模块如何解决应用问题,但是对于复杂,并行的任务,单…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

JavaSE——集合框架二(1/6)-前置知识-可变参数、Collections工具类

目录 可变参数 Collections工具类 Collections的常用静态方法 实例演示 可变参数 可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;格式是&#xff1a;数据类型...参数名称 可变参数的特点和好处 特点&#xff1a;可以不传数据给它&am…

SQL常用基础语句(一)-- ABCDE开头

AS 将列名从 count(*) 修改为 total select count(*) as total from users where status0 将列名 username 改为 uname&#xff0c; password 改为 upwd select username as uname, password as upwd from users BETWEEN AND 说明&#xff1a;BETWEEN 筛选的是 >value1且 &l…

小程序主体变更是通过迁移吗?是需要2个小程序吗?

小程序迁移变更主体有什么作用&#xff1f;好多朋友都想做小程序迁移变更主体&#xff0c;但是又不太清楚具体有啥用&#xff0c;今天我就来详细说说。首先&#xff0c;小程序迁移变更主体最重要的作用就是可以修改主体。比如你的小程序原来是 A 公司的&#xff0c;现在 A 公司…

操作系统实验四:多线程与信号量编程

操作系统实验上机 更多技术请访问&#xff1a;www.xuanworld.top 部分审核不通过的文章将发至个人博客&#xff1a;www.xuanworld.top 欢迎来52破解论坛阅读帖子&#xff1a;https://www.52pojie.cn/thread-1891208-1-1.html 实验名称实验序号实验日期实验人多线程与信号量…

010-Linux磁盘介绍

文章目录 1、名词 2、类型 3、尺寸 4、接口/协议/总线 5、命名 6、分区方式 MBR分区 GPT分区 1、名词 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘&#xff08;Floppy D…

基于yolov5和desnet的猫咪识别模型

前言 前段时间给学校的猫咪小程序搭建了识猫模型&#xff0c;可以通过猫咪的照片辨别出是那只猫猫&#xff0c;这里分享下具体的方案&#xff0c;先看效果图&#xff1a; 源代码在文末 模型训练 在训练服务器&#xff08;或你的个人PC&#xff09;上拉取本仓库代码。 图片数…

10款免费黑科技软件,强烈推荐!

1.AI视频生成——巨日禄 网页版https://aitools.jurilu.com/ "巨日禄 "是一款功能强大的文本视频生成器&#xff0c;可以快速将文本内容转换成极具吸引力的视频。操作简单&#xff0c;用户只需输入文字&#xff0c;选择喜欢的样式和模板&#xff0c; “巨日禄”就会…

Day39贪心算法part06

LC738单调递增的数字&#xff08;未掌握&#xff09; 思路分析&#xff1a;一旦出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;首先想让strNum[i - 1]–&#xff0c;然后strNum[i]给为9字符串是不可变的&#xff0c;不可以使用s.char…

树莓派学习笔记——树莓派的三种GPIO编码方式

1、板载编码&#xff08;Board pin numbering&#xff09;: 板载编码是树莓派上的一种GPIO引脚编号方式&#xff0c;它指的是按照引脚在树莓派主板上的物理位置来编号。这种方式对于初学者来说可能比较直观&#xff0c;因为它允许你直接根据引脚在板上的位置来编程。 2、BCM编…

Linux gurb2简介

文章目录 前言一、GRUB 2简介二、GRUB 2相关文件/文件夹2.1 /etc/default/grub文件2.2 /etc/grub.d/文件夹2.3 /boot/grub/grub.cfg文件 三、grubx64.efi参考资料 前言 简单来说&#xff0c;引导加载程序&#xff08;boot loader&#xff09;是计算机启动时运行的第一个软件程…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《计及温控厌氧发酵和阶梯碳交易的农村综合能源低碳经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

网络域名是什么意思

网络域名&#xff0c;顾名思义&#xff0c;就是网络上的名字&#xff0c;类似于现实中的地址或姓名一样&#xff0c;用来标识网络上的一个或一组计算机或服务器的位置&#xff0c;以及它们的相应服务资源。网络域名是互联网上最基础的基础设施之一&#xff0c;是网络通信的“标…

【mysql】更新操作是如何执行的

现有一张表&#xff0c;建表语句如下&#xff1a; mysql> create table T(ID int primary key, c int);如果要将 ID2 这一行的a字段值加 1&#xff0c;SQL语句会这么写&#xff1a; mysql> update T set c c 1 where ID 2;上面这条sql执行时&#xff0c;分析器会通过词…

Nacos 微服务管理

Nacos 本教程将为您提供Nacos的基本介绍&#xff0c;并带您完成Nacos的安装、服务注册与发现、配置管理等功能。在这个过程中&#xff0c;您将学到如何使用Nacos进行微服务管理。下方是官方文档&#xff1a; Nacos官方文档 1. Nacos 简介 Nacos&#xff08;Naming and Confi…

操作符详解(上)(新手向)

操作符详解&#xff08;上&#xff09; 一&#xff0c;算术操作符&#xff08;双目操作符&#xff09;1:‘’,‘-’,‘*’2&#xff1a;‘/’&#xff0c;‘%’ 一&#xff0c;单目操作符1:‘’,‘-’2&#xff1a;‘!’3&#xff1a;‘&’4&#xff1a;‘*’5&#xff1a;…