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

news2024/11/28 10:55:27

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

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.coloradmin.cn/o/1146077.html

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

相关文章

08.K8S高可用方案

K8S高可用方案 1、高可用部署方式 官方提供两种高可用实现方式: 堆叠etcd 拓扑,其中 etcd 节点与控制平面节点共存;外部 etcd 节点,其中 etcd 与控制平面在不同的节点上运行;1.1、堆叠 etcd 拓扑 主要特点: 每个 master 节点上运行一个 apiserver 和 etcd, etcd 只与本…

Spring Security: 整体架构

Filter Spring Security 是基于 Sevlet Filter 实现的。下面是一次 Http 请求从 client 出发,与 Servlet 交互的图: 当客户端发送一个请求到应用,容器会创建一个 FilterChain,FilterChain 中包含多个 Filter 和 Servlet。这些 Fi…

C#,数值计算——分类与推理,基座向量机的 Svmgenkernel的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public abstract class Svmgenkernel { public int m { get; set; } public int kcalls { get; set; } public double[,] ker { get; set; } public double[] y { get; set…

构建第二大脑#知识库使用指南

fortelabs.com/blog/basboverview 《构建第二大脑:入门指南》提到一个步骤: 通过策划和管理您的个人信息流来减轻压力和“信息过载”创建一个内心平静的数字环境充分发挥您周围丰富学习资源的价值,例如在线课程、网络研讨会、书籍、文章、论坛…

threejs(8)-详解光线投射与物体交互

详解光线投射与物体交互 import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 导入动画库 import gsap from "gsap"; // 导入dat.gui import * as dat from &qu…

QVHZO-A-06/18、QVHZE-A-06/36比例流量控制阀放大器

QVHZO-A-06/36、QVHZO-A-06/12、QVHZO-A-06/45、QVHZO-A-06/18、QVKZOR-A-10/65、QVKZOR-A-10/90、QVHZE-A-06/36、QVHZE-A-06/12、QVHZE-A-06/45、QVHZE-A-06/18、QVKZE-A-10/65、QVKZE-A-10/90带压力补偿的比例流量控制阀,直动式,不带位置传感器&#…

圆锥面积 题解

圆锥体积 描述 已知一个圆锥体的高 h 和底面积的半径 r ,求该圆锥体的体积,保留3位小数。 圆锥底部圆面积S的计算公式为��∗�∗�Sπ∗r∗r 这里的�3.14159π3.14159 圆锥体的体积V计算公式为…

可以提取图像文本的 5 大 Python 库

主要是了解并掌握文本定位和识别的OCR工具哦~ 光学字符识别是一个古老但依然具有挑战性的问题,涉及从非结构化数据中(包括图像和PDF文档)检测和识别文本。它在银行、电子商务和社交媒体内容管理等领域具有广泛的应用。 但与数据科学中的每个主…

FreeRTOS中osDelay和HAL_Delay的区别

问题场景 在FreeRTOS中创建了线程A、线程B,其中线程A优先级大于线程B。线程A、B任务代码如下: void A(void *argument) {while (1){printf("A\r\n");HAL_Delay(1000);} }void B(void *argument) {while (1){printf("B\r\n");HAL_Delay(1000);} …

基于springboot实现校园疫情防控系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校园疫情防控系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&am…

回溯法(1)--装载问题和0-1背包

一、回溯法 回溯法采用DFS+剪枝的方式,通过剪枝删掉不满足条件的树,提高本身作为穷举搜索的效率。 回溯法一般有子集树和排列树两种方式,下面的装载问题和01背包问题属于子集树的范畴。 解空间类型: 子集树&#xff1…

【C++项目】高并发内存池第七讲性能分析

目录 1.测试代码2.代码介绍3.运行结结果 1.测试代码 #include"ConcurrentAlloc.h" #include"ObjectPool.h" #include"Common.h" void BenchmarkMalloc(size_t ntimes, size_t nworks, size_t rounds) {std::vector<std::thread> vthread(…

超强Redis基础学习 优化 使用 常见问题

问题大纲 为什么Redis可以这么快&#xff1f; 它是纯内存操作&#xff0c;内存本身就很快 其次&#xff0c;它是单线程的&#xff0c;Redis服务器核心是基于非阻塞的IO多路复用机制&#xff0c;单线程避免了多线程的频繁上下文切换问题 Redis的持久化机制 Redis提供了持久化…

会声会影2024输出文件太大什么原因 会声会影输出文件处于保护状态什么原因

会声会影2024是一款专业的视频编辑软件&#xff0c;它由于简单易学的操作被众人所喜爱。在会声会影中编辑好的视频一般以渲染的形式导出保存&#xff0c;但是有时会出现输出文件太大的情况&#xff0c;这到底是什么原因呢&#xff1f;下面由我带大家一起来了解会声会影输出文件…

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…

机器学习(五)如何理解机器学习三要素

1.8如何理解机器学习三要素 统计学习模型策略算法 模型&#xff1a;规律yaxb 策略&#xff1a;什么样的模型是好的模型&#xff1f;损失函数 算法&#xff1a;如何高效找到最优参数&#xff0c;模型中的参数a和b 1.8.1模型 机器学习中&#xff0c;首先要考虑学习什么样的…

5G 3GPP全球频谱介绍

所谓 “频谱”&#xff0c;是指特定类型的无线通信所在的射频范围。不同的无线技术使用不同的频谱&#xff0c;因此互不干扰。由于一项技术的频谱是有限的&#xff0c;因此频谱空间存在大量竞争&#xff0c;并且人们也在不断开发和增强全新的、高效率的频谱使用方式。 介绍5G …

ConcurrentHashMap 的 size()方法是线程安全的吗?为什么

ConcurrentHashMap 的 size()方法是非线程安全的。也就是说&#xff0c;当有线程调用 put 方法在添加元素的时候&#xff0c;其他线程在调用 size()方法获取的元素个数和实际存储元素个数是不一致的。原因是 size()方法是一个非同步方法&#xff0c;put()方法和 size()方法并没…

获取某个抖音用户的视频列表信息

思路 确定url确定并获取相关参数构造header发送请求解析数据输出数据 运行结果 代码 import requests # 获取某个用户的的视频信息&#xff0c;截至20231028&#xff0c;程序可以正常运行。 # 构造请求头header headers {User-Agent:..........................,Cookie:...…

10分钟了解JWT令牌 (JSON Web)

10分钟了解JSON Web令牌&#xff08;JWT&#xff09; JSON Web Token&#xff08;JWT&#xff09;是目前最流行的跨域身份验证解决方案。今天给大家介绍JWT的原理和用法。 1.跨域身份验证 Internet服务无法与用户身份验证分开。一般过程如下。 1.用户向服务器发送用户名和密码。…