Pandas中你一定要掌握的时间序列相关高级功能

news2025/7/12 8:44:02

💡 作者:韩信子@ShowMeAI
📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40
📘 本文地址:https://www.showmeai.tech/article-detail/389
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

Pandas 是大家都非常熟悉的数据分析与处理工具库,对于结构化的业务数据,它能很方便地进行各种数据分析和数据操作。但我们的数据中,经常会存在对应时间的字段,很多业务数据也是时间序组织,很多时候我们不可避免地需要和时间序列数据打交道。其实 Pandas 中有非常好的时间序列处理方法,但是因为使用并不特别多,很多基础教程也会略过这一部分。

在本篇内容中,ShowMeAI对 Pandas 中处理时间的核心函数方法进行讲解。相信大家学习过后,会在处理时间序列型数据时,更得心应手。

数据分析与处理的完整知识技能,大家可以参考ShowMeAI制作的工具库速查表和教程进行学习和快速使用。

  • 📘数据科学工具库速查表 | Pandas 速查表

  • 📘图解数据分析:从入门到精通系列教程

💡 时间序列

时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。简单说来,时间序列是随着时间的推移记录某些取值,比如说商店一年的销售额(按照月份从1月到12月)。

💡 Pandas 时间序列处理

我们要了解的第一件事是如何在 Pandas 中创建一组日期。我们可以使用date_range()创建任意数量的日期,函数需要你提供起始时间、时间长度和时间间隔。

# 构建时长为7的时间序列
pd.date_range("2022-01-01", periods=7, freq='D')

# 输出
# DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04','2022-01-05', '2022-01-06', '2022-01-07'],               dtype='datetime64[ns]', freq='D')

注意到上面的频率可用freq来设置:最常见的是'W'每周,'D'是每天,'M'是月末,'MS'是月开始。

下面我们创建一个包含日期和销售额的时间序列数据,并将日期设置为索引。

# 设置随机种子,可以复现
np.random.seed(12)

# 构建数据集
df = pd.DataFrame({
 'date': pd.date_range("2022-01-01", periods=180, freq='D'),
 'sales': np.random.randint(1000, 10000, size=180)}) 
 
 # 设置索引
df = df.set_index('date')

注意,我们要方便地对时间序列进行处理,一个很重要的先序工作是将日期作为索引,我们前面已经完成这个工作了。

💦 重采样

Pandas 中很重要的一个核心功能是resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。

方法的格式是:

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0)

核心的参数rule是字符串,表示采样的频度。如下代码,在resample后接的mean是表示按照月度求平均。

# Resample by month end date
df.resample(rule= 'M').mean()

按月取平均值后,将索引设置为每月结束日期,结果如下。

我们也可以按每周销售额绘制汇总数据。

# 采样绘图
df.resample('W').mean().plot(figsize=(15,5), title='Avg Weekly Sales');

上图可以看出,销量在3月和4月之间的销售额有所下降,而在 6 月中旬达到顶峰。

💦 平移

Pandas 中的shift功能,可以让字段向上或向下平移数据。这个平移数据的功能很容易帮助我们得到前一天或者后一天的数据,可以通过设置shift的参数来完成上周或者下周数据的平移。

# 原始数据的一份拷贝
df_shift = df.copy()

# 平移一天
df_shift['next_day_sales'] = df_shift.sales.shift(-1)

# 平移一周
df_shift['next_week_sales'] = df_shift.sales.shift(-7)

在时间序列问题中,我们经常要完成同比和环比数据,通过shift后的数据做差就很容易得到。

# 计算差值
df_shift['one_week_net'] = df_shift.sales - df_shift.sales.shift(-7)

💦 滑动平均

下一个核心功能是rolling滑动平均,它是做交易的朋友非常常用到的一个功能,rolling函数创建一个窗口来聚合数据。

# 长度为2天的窗口,求滑动平均
df.rolling(2).mean()

在下图中,我们可以看到第一个值是NaN,因为再往前没有数据了。对第2个点,它对数据集的前2行计算平均: (6787 + 4325)/2 = 5556。

滚动平均值非常适合表征趋势,滑动窗口越大,得到的结果曲线越平滑,最常用的是7天平均。

# 滑动平均绘图
df.sales.plot(figsize=(25,8), legend=True, linestyle='--', color='darkgray')
df.rolling(window=7).sales.mean().plot(legend=True, label='7 day average', linewidth=2)
df.rolling(30).sales.mean().plot(legend=True, label='30 day average', linewidth=3)
df.rolling(100).sales.mean().plot(legend=True, label='100 day average', linewidth=4)

💡 总结

Pandas在时间序列处理和分析中也非常有效,ShowMeAI在本篇内容中介绍的3个核心函数,是最常用的时间序列分析功能:

  • resample:将数据从每日频率转换为其他时间频率。
  • shift:字段上下平移数据以进行比较或计算。
  • rolling:创建滑动平均值,查看趋势。

参考资料

  • 📘数据科学工具库速查表 | Pandas 速查表:https://www.showmeai.tech/article-detail/101
  • 📘图解数据分析:从入门到精通系列教程:https://www.showmeai.tech/tutorials/33

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

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

相关文章

ceph浅谈

总谈 ceph简介 用上ceph,多台机器的磁盘空间在一起了,在一台机器上就可以看到使用所有空间。 还可以保存多份安全备份 存储先ceph,自我管理修复,跨机房,节点越多,并行化,论上,节点越…

【虚幻引擎UE】UE5 实现相机录制视频并导出(C++调用外部exe)

说明: 该功能暂不支持导出声音。 由于OpenCV3和UE5不太兼容,因此考虑制作外部exe实现视频合成。 一、创建渲染目标 二、创建Actor加场景捕获组件2D 三、创建UE5内的C++代码 1、实现 SavePicToFile 导出图片蓝图函数 .cpp文件 // Fill out your copyright notice in the De…

数字集成电路设计(二、Verilog HDL基础知识)

文章目录1. 语言要素1.1 空白符1.2 注释符1.3 标识符1.3.1 转义标识符1.4 关键字1.5 数值1.5.1 整数及其表示方式1.5.2 实数及其表示方式1.5.3 字符串及其表示方式2. 数据类型2.1 物理数据类型2.1.1 连线型2.1.2 寄存器型2.2 连线型和寄存器型数据类型的声明2.2.1 连线型数据类…

深入了解海豚调度DolphinScheduler

深入了解海豚调度DolphinScheduler一、海豚调度介绍二、海豚调度特性三、建议配置四、名词解释五、模块介绍六、功能介绍1.项目首页2.工作流定义3.工作流实例4.任务实例5.任务定义七、任务类型1.SQL2.SPARK节点3.Apache Zeppelin八、集群部署1.前置准备工作2.准备 DolphinSched…

实现注册与登录模块

目录 1、加载依赖 2、实现jwt工具类jwtUtil类 3、实现config.filter.JwtAuthenticationTokenFilter类 4、配置config.SecurityConfig类 5、创建后端api之前对数据库进行修改 6、写API一共需要的三个地方 7、实现三个接口 8、验证用户登录用API调试 9、https://jwt.io/解…

MySQL表的增删查改(CRUD)

文章目录前言一、新增数据二、查询数据全列查询指定列查询表达式查询指定别名查询去重查询排序查询条件查询分页查询三、修改数据四、删除数据前言 CRUD代表: 增加(create) ,查询(retrieve) ,更新(update) ,删除(delete) 单词首字母。 一、新增数据 SQL使用insert关键字来表…

二叉搜索树、红黑树详解、红黑树高的应用、TreeMap的应用(图文详解)-Kotlin版本代码

二叉搜索树 何为二叉搜索树? 二叉搜索树是一种特殊的二叉树,它的左子节点总是小于或等于根节点,而右子节点 总是大于或等于根节点。 如下图,即是一颗二叉搜索树。 对于二叉搜索树来说,中序遍历可以遍历按照节点值…

【JavaSE】重载和重写

前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行 如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步! 如果觉得博主文章还不错的话,希望三连支持&#xff01…

python--敲击木鱼积累功德小项目(更新版(2))

前言:前几天上课闲着没事写了一个python敲击木鱼积累功德的小项目,当时纯粹就是写着玩,回顾一下鼠标事件的东西还记不记得,发现这个博客的点赞和收藏量还挺高的,我当时也没有把它当回事,后面也有很多人问怎…

11.11一些资源整理和总结

使用python读取tensorboard文件中的数据并写入到excel当中去能够代替Originlab的画图软件(macos)Mac款origin来了!还不来看看!ptflops:计算网络参数FLOPs的工具[github] 4 中方式计算 FLOPs(知乎&#xff0…

栈和队列实现的思路和代码

栈和队列第一节----栈什么是栈实现栈的基本思路各个接口函数的实现初始化栈销毁栈压栈出栈返回栈顶元素栈的判空栈的大小第二节----队列什么是队列实现队列的基本思路各个接口函数的实现队列的初始化队列的销毁队列的插入队列的删除返回队头元素和队尾元素队列的判空队列的大小…

使用DESeq2进行转录组原始count标准化和差异分析

转录组测序完成后,一般我们会获得一个原始 read count表达矩阵,其中行是基因,列是样品。常用的差异分析工具包括limma、edgeR和DESeq2。DESeq2在测序领域使用最为广泛(google scholar引用高达43284次,edgeR为28076次&a…

MYSQL索引查询问题质疑

前言 我们在写mysql查询语句的时候,尤其是经验不足的同学肯定会想要怎么使用索引加快查询,或是我这样写到底会不会命中索引。那么现在我就列举几个常见的索引查询问题进行简单说明一下。(欢迎互怼!) 1.问&#xff1a…

小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法

小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法前言游戏界面按钮实现事件实现的三种方法1、按钮定义及事件3种方法1.1 按钮定义1.2三种事件引用方法1.2.1 类法1.2.2 事件方法2,自定义方法函数1.2.3 事件方法3,使用装饰器处理onclick事件1.3 效果图1.4 代码…

第十四届蓝桥杯校模拟赛详解+代码(一)

“须知少时凌云志,自许人间第一流” 鄙人11月八号有幸参加学校蓝桥杯校选拔赛,题型为5道填空题,5道编程题,总时间为4小时。奈何能力有限,只完成了5道填空和3道编程大题,现进行自省自纠,分享学习…

艾美捷细胞计数试剂盒-8(CCK-8),一步到位

艾美捷细胞计数试剂盒-8(CCK-8):用于简单准确的细胞增殖和细胞毒性测定的比色试剂盒。 艾美捷细胞计数试剂盒-8(CCK-8)特点: 1、一步到位,不含放射性同位素的即用溶液 2、与[3H]-胸苷掺入试验…

分销商城平台哪个好_分享分销商城开发步骤

微信分销商城平台分为两种: 第一种是入驻到别人的微信分销商城平台里面,帮助分销别人发布的商品从而获得佣金。 第二种情况是自己公司开发的微信分销商城平台,然后招募分销者进行分销公司的产品。 对于大家来讲肯定是自己公司开发的微信分销商…

数据结构与算法_大数据处理_求topK的两种求解方法

这篇笔记记录求大数据topk的两种方法,分别是大小二叉堆法和快速分割法,下面依次详解这两种方法的过程。 1 大/小根堆法 利用大根堆过滤前top k小的数据**;小根堆过滤前top k大的数据**; 下面用大根堆求前k个小元素为例。 思想&…

Python 算法:学习二分法

二分法,一个看似简单,逻辑易懂的算法,但是初次接触可能会有很多坑!主要是边界处理的问题。 下面以一个耳熟能详的案例来展开: 案例描述: 小B从1~100之间(含边界值)任意想一个数字&a…

Spring Security 在登录时如何添加图形验证码

前言 在前面的几篇文章中,登录时都是使用用户名 密码进行登录的,但是在实际项目当中,登录时,还需要输入图形验证码。那如何在 Spring Security 现有的认证体系中,加入自己的认证逻辑呢?这就是本文的内容&…