Pandas时间序列、时间戳对象、类型转换、时间序列提取、筛选、重采样、窗口滑动

时间序列数据是指在时间间隔不变的情况下收集的时间点数据,可以用来分析事物的长期发展趋势,并对未来进行预测。

date_range()方法及参数

pandas.date_range(start=None, end=None, periods=None, freq=None,
tz=None, normalize=False, name=None, inclusive=‘both’, *, unit=None,
**kwargs)

start:指定生成时间序列的开始时间。
end:指定生成时间序列的结束时间。
periods:指定生成时间序列的数量。

前三个参数,需要至少指定两个。

freq:指定生成时间序列的频率,默认为“D”(天),可以是Y年,M月,10D 10天,H时,5H 5个小时,T分钟,S秒等。
tz:返回本地化的DatetimeIndex的时区名称。
normalize:将开始、结束时间标准化为午夜,然后生成日期范围。
name:用来设置生成DatetimeIndex的名称。
inclusive:用来设置是否包含开始和结束时间,取值为left包含开始时间,不包含结束时间。取值为right则与left相反。默认为全闭区间。
unit:单位

返回类型是DatetimeIndex。

创建时间序列

import pandas  as pd
myt1 = pd.date_range(start='2022-10-28',end='2023-10-28')
display(myt1)myt2 = pd.date_range(start='2022-10-28',periods=11,freq='M')
display(myt2)myt3 = pd.date_range(start='2022-10-28 12:15:36',periods=11,freq='5T')
display(myt3)

1
以上三段代码:分别创建了频率为天、月、5分钟的时间序列。

时间戳对象

时间戳(Timestamp)类提供了丰富的时间处理接口,如日期加减、属性提取等。

import pandas  as pd
myt1 =pd.Timestamp('2023-10-28')
display(myt1)myt2 =pd.Timestamp('01:06:32')
display(myt2)

1
以上代码指定了日期的部分,分别创建了日期零点和当天时间的时间戳对象。

时间类型与字符串型的转换

在Pandas中,把字符串转化为时间类型使用to_datetime()方法,
把时间类型转换为字符串类型使用astype()方法。

import pandas as pd
myts1=pd.DataFrame({'A':[1,2,3,4,5,6],'B':['10:12:05','10:12:06','10:12:07','10:12:08','10:12:09','10:12:10']},index=pd.date_range(start='10:12:05',periods=6,freq='S'))
print(myts1)myts1.info()# 字符串转日期
myts1.B=pd.to_datetime(myts1.B, format="%H:%M:%S")
display(myts1)# 日期转字符串
print(myts1.index.time.astype(str))
# ['10:12:05' '10:12:06' '10:12:07' '10:12:08' '10:12:09' '10:12:10']
print(myts1.index.date.astype(str))
# ['2023-10-28' '2023-10-28' '2023-10-28' '2023-10-28' '2023-10-28' '2023-10-28']

import pandas  as pd
mytt1 =pd.Timestamp('2021-12-21 11:16:42')
display(mytt1)print('显示的日期时间是:',mytt1.year,'年',mytt1.month,'月',mytt1.day, '日',mytt1.hour,'时',mytt1.minute,'分',mytt1.second,'秒')print('一周中的第几天:',mytt1.dayofweek)
print('一年中的第几周:',mytt1.weekofyear)
print('一年中的第几季度:',mytt1.quarter)if mytt1.is_leap_year :print('显示的日期是润年!')
else :print('显示的日期不是润年!')
if mytt1.is_month_start :print('显示的日期是月初第一天!')
else :print('显示的日期不是月初第一天!')
if mytt1.is_quarter_end :print('显示的日期是季度最后一天!')
else :print('显示的日期不是季度最后一天!')
if mytt1.is_year_start :print('显示的日期是年初第一天!')
else :print('显示的日期不是年初第一天!')

1

时间序列数据的筛选

import pandas as pd
import numpy as np
mys1 = pd.DataFrame(np.random.randint(10, 1000,size=(100,6)), columns=['A', 'B', 'C','D','E','F'],index=pd.date_range('2023-12-20 10:15:16', periods= 100,freq='20T'))
print(mys1)# 索引模糊匹配
mys1['2023-12-20 10':'2023-12-20 12']# truncate过滤
mys1.truncate(before='2023-12-20 10:10:00',after='2023-12-20 11:50:00')# between,需要先重置索引,增加索引列index
mys1=mys1.reset_index()
display(mys1)mys1[mys1['index'].between('2023-12-20 10:15:30','2023-12-20 11:15:30')]

这里用到了三种方法来筛选日期:索引、truncate、between。

时间序列数据的重采样

时间序列的重采样是一种对原数据重新处理的方法,是对常规时间序列数据重新采样和频率转换的快捷方法。重采样分两种,分别是降采样和升采样。降采样是指高频数据到低频数据。升采样是指低频数据到高频数据。

import pandas as pd
import numpy as np
index =pd.date_range('2023-10-28 00:00:00', periods=10,freq='2T')
myse1 = pd.Series(range(10), index=index)
display(myse1)# 降采样
myse1.resample('4T').sum()# 满足条件的标签用右侧的right,如9:30~9:35,会选择9:35。
myse1.resample('4T',label='right').sum()# 右侧闭区间
myse1.resample('4T',label='right',closed='right').sum()# 使用asfreq()查看重采样后的结果
myse1.resample('1T').asfreq()# 填充缺失值:向后填充缺失值
myse1.resample('1T').bfill()# 填充缺失值:向前填充缺失值
myse1.resample('1T').ffill()

窗口滑动

实现时间序列数据的窗口滑动主要有三种方法,分别是shift()方法、diff()方法和rolling()方法。
shift()方法可以实现向前或向后取值。
diff()方法可以实现向前或向后取差值。
rolling()方法可以实现在一段滑动窗口内聚合取值。

import pandas as pd
import numpy as np
myse1 = pd.DataFrame(np.random.randint(100, 1000,size=(96,6)), columns=['A', 'B', 'C','D','E','F'],index=pd.date_range('2023-10-28 10:00:00', periods=96,freq='5T'))
print(myse1)myse1.head()# 显示前5条
myse1.shift(1).head()# 向后滑动5分钟取值
myse1.shift(1,freq='5T').head()myse1.diff(1).head()myse1.rolling(window=3).mean().head()

参考

date_range
timeseries-offset-aliases

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

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

相关文章

cosover是什么?crossover23又是什么软件

cosover是篮球里的过人技巧。 1.crossover在篮球中的本意是交叉步和急速交叉步。crossover 是篮球术语,有胯下运球、双手交替运球,交叉步过人、急速大幅度变向等之意。 2.在NBA里是指包括胯下运球、变向、插花在内的过人的技巧。 NBA有很多著名的Cross…

Pytorch整体工作流程代码详解(新手入门)

一、前言 本文详细介绍Pytorch的基本工作流程及代码,以及如何在GPU上训练模型(如下图所示)包括数据准备、模型搭建、模型训练、评估及模型的保存和载入。 适用读者:有一定的Python和机器学习基础的深度学习/Pytorch初学者。 本文…

vue3.0运行npm run dev 报错Cannot find module node:url

vue3.0运行npm run dev 报错Cannot find module 问题背景 近期用vue3.0写项目,npm init vuelatest —> npm install 都正常,npm run dev的时候报错如下: failed to load config from F:\code\testVue\vue-demo\vite.config.js error when starting…

buuctf_练[安洵杯 2019]easy_web

[安洵杯 2019]easy_web 文章目录 [安洵杯 2019]easy_web掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 url地址和源代码的信息捕捉;图片和base64之间转换;base64和十六进制编码的了解;代码审计,绕过正则匹配对关键字的…

springboot配置redis、Spring cache

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

微信小程序实现文章内容详情

方案一、使用微信小程序官方提供的webview 前提已经在微信公众平台开发管理配置好了安全域名即&#xff1a; 方案二、把网页转成pdf直接展示 前提已经在微信公众平台开发管理配置好了安全域名即&#xff1a; 实现思路是发起网络请求拿到pdf下载地址&#xff0c;然后wx.download…

轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiMaterialPass.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …

vscode C++项目相对路径的问题

如图所示的项目目录结构 如果要在main.cpp里用相对路径保存一个txt文件 std::ofstream file("./tree_model/my_file.txt");if (file.is_open()) {file << "This is a sample text.\n";file.close();std::cout << "File saved in the mode…

二叉树:什么样的二叉树适合用数组来存储?

文章来源于极客时间前google工程师−王争专栏。 前面我们讲的都是线性表结构&#xff0c;栈、队列等等。今天我们讲一种非线性表结构&#xff0c;树。树这种数据结构比线性表的数据结构要复杂得多&#xff0c;内容也比较多&#xff0c;所以我会分四节来讲解。 问题&#xff1…

删除元素专题

这篇也是凑数的 ... 题目 : LeetCode 27.移除元素 : 27. 移除元素 分析 : 快慢指针 : 定义两个指针slow和fast&#xff0c;初始值都是0。Slow之前的位置都是有效部分&#xff0c;fast表示当前要访问的元素。 这样遍历的时候&#xff0c;fast不断向后移动: 如果nums[fast…

031-从零搭建微服务-监控中心(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

【idea】使用教程:idea 打开项目、配置、项目打包详细教程

目录 一、配套软件安装 二、打开已有项目 三、配置 jdk 四、项目打包 五、服务器首次创建目录 &#xff08;1&#xff09;后端代码目录 &#xff08;2&#xff09;前端代码目录 &#xff08;3&#xff09; 打包后的代码包上传到服务器上 一、配套软件安装 【idea】wi…

用低代码平台代替Excel搭建进销存管理系统

目录 一、用低代码平台搭建系统 1.需求调研 2.基于痛点梳理业务流程 3.低代码实现 &#xff08;1&#xff09;基础资料模块 &#xff08;2&#xff09;采购管理模块 &#xff08;3&#xff09;销售管理模块 &#xff08;4&#xff09;库存管理模块 &#xff08;5&…

C#开发DLL,CAPL调用(CAPL>> .NET DLL)

文章目录 展示说明新建类库工程C# 代码生成dllCAPL脚本调用dll,输出结果展示 ret为dll里函数返回的值。 说明 新建类库工程 在visual studio中建立。 C# 代码 using

PHP简单实现预定义钩子和自定义钩子

在PHP中&#xff0c;钩子&#xff08;Hooks&#xff09;是一种机制&#xff0c;允许开发人员在特定的时机插入自定义代码。通过使用钩子&#xff0c;开发人员可以在应用程序的特定事件发生时执行自定义的功能或逻辑 钩子有两种类型&#xff1a;预定义钩子和自定义钩子。 预定…

通达信高级使用:预先筛选股票池进行预警选股

现在A股市场大概有4000多个股票&#xff0c;如果盘中利用实时数据进行条件选股的话&#xff0c;可能选股时间大概需要5分钟时间&#xff0c;这个5分钟选股时间就要命了&#xff0c;因为你可能错过了符合的股票&#xff0c;错过了观察时间窗口&#xff0c;最终选出来也无济于事&…

Java练习题2022-3

从键盘上输入一个数值字符串&#xff08;表示非负整数&#xff0c;所以该字符串不带正负号和小数点&#xff09;&#xff0c;输出这个字符串中的数字字符重新组合的最小数。例如“654321”输出的为“123456”&#xff1b;“001254”输出为“100245”&#xff1b;“00000”输出为…

[Leetcode] 0100. 相同的树

100. 相同的树 题目描述 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&…

【2021集创赛】Robei杯一等奖:基于Robei EDA工具的隔离病房看护机器人设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;重庆交通大学 队伍名称&#xff1a;一丘之貉 指导老师&#xff1a;毕波 李艾星 参赛队员&#xff1a;郁航 张坤 秦衡 总决赛奖项&#xff1a;Robei杯一等奖…

面试题之JavaScript经典for循环(var let)

如果你也在面试找工作&#xff0c;那么也一定遇到过这道for循环打印结果的题&#xff0c;下面我们来探讨下 var循环 for(var i 0; i < 10; i) {setTimeout(function(){console.log(i)}); } 先把答案写出来 下面来讲一下原因&#xff1a; 划重点 ① var ②setTimeout() …