4.3 转换与处理时间数据

news2025/4/8 8:25:51

4.3 转换与处理时间数据

  • 4.3.1 转换字符串时间为标准时间
    • 1、Timestamp
    • 2、DatetimeIndex或者PeriodIndex
      • DatetimeIndex与PeriodIndex函数及其参数说明
  • 4.3.2 提取时间序列数据信息
    • Timestamp类常用属性及说明
  • 4.3.3 加减时间数据
    • Timedelta类周期名称、对应单位及其说明
  • 4.3.4 任务实现
  • 数据
  • 全部代码

4.3.1 转换字符串时间为标准时间

在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准时间类型。pandas继承了NumPy库和datetime库的时间相关模块,提供了6种时间相关的类。
在这里插入图片描述

1、Timestamp

Timestamp作为时间类中最基础的,也是最为常用的类型,在多数情况下,时间相关的字符串都会转换成为Timestamp。pandas提供了to_datetime函数,能够实现这一目标。

import pandas as pd
data = pd.read_csv('E:/Input/ptest.csv')
print(data['time'].head(3))
print(f"转换前:{data['time'].dtypes}")
data['time'] = pd.to_datetime(data['time'])  # 转换为Timestamp类型
print(f"转换后:{data['time'].dtypes}")
print(data['time'].head(3))
#  Timestamp类型的时间是有限制的
print("最小时间为:", pd.Timestamp.min)
print("最大时间为:", pd.Timestamp.max)

在这里插入图片描述
注意:Timestamp类型的时间是有限制的,最小时间为: 1677-09-21 00:12:43.145224193
最大时间为: 2262-04-11 23:47:16.854775807

2、DatetimeIndex或者PeriodIndex

除了将数据字原始DataFrame中直接转换为Timestamp格式外,还可以将数据单独提取出来将其转换为DatetimeIndex或者PeriodIndex。
转换为PeriodIndex的时候需要注意,需要通过freq参数指定时间间隔,常用的时间间隔有Y为年,M为月,D为日,H为小时,T为分钟,S为秒。两个函数可以用来转换数据还可以用来创建时间序列数据,其参数非常类似。

DatetimeIndex与PeriodIndex函数及其参数说明

在这里插入图片描述
DatetimeIndex和PeriodIndex两者区别在日常使用的过程中相对较小,其中DatetimeIndex是用来指代一系列时间点的一种数据结构,而PeriodIndex则是用来指代一系列时间段的数据结构。

# DatetimeIndex或者PeriodIndex
timeindex = pd.DatetimeIndex(data['time'])
# print(timeindex)
print("转换为DatetimeIndex后:", type(timeindex))
# 常用的时间间隔有Y为年,M为月,D为日,H为小时,T为分钟,S为秒
periodindex = pd.PeriodIndex(data['time'], freq='S')
# print(periodindex)
print("转换为PeriodIndex后:", type(periodindex))

在这里插入图片描述

4.3.2 提取时间序列数据信息

在多数涉及时间相关的数据处理,统计分析的过程中,需要提取时间中的年份,月份等数据,使用对应的Timestamp类属性就能够实现这一目的。

Timestamp类常用属性及说明

在这里插入图片描述

# 4.3.2 提取时间序列数据信息
y1 = [i.year for i in data['time']]
print(y1[:3])  # 打印年的前三个
m1 = [i.month for i in data['time']]
print(m1[:3])  # 打印月的前三个
d1 = [i.day for i in data['time']]
print(d1[:3])  # 打印日的前三个
h1 = [i.hour for i in data['time']]
print(h1[:3])  # 打印小时前三个
min1 = [i.minute for i in data['time']]
print(min1[:3])  # 打印分钟前三个
s1 = [i.second for i in data['time']]
print(s1[:3])  # 打印秒前三个
w1 = [i.week for i in data['time']]  # 一年中第几个周
print(w1[:3])  # 打印前三个
days = [i.dayofyear for i in data['time']]  # 一年的第几天
print(days[:3])  # 打印前三个

4.3.3 加减时间数据

pandas的时间数据和现实生活中的时间数据一样可以做运算,这时就涉及到pandas的Timedelta类。Timedelta是时间相关的类中的一个异类,不仅能够使用正数,还能够使用负数表示单位时间,例如1秒,2分钟,3小时等。使用Timedelta类,配合常规的时间相关类能够轻松实现时间的算术运算。
目前Timedelta函数中时间周期中没有年和月。所有周期名称,对应单位及其说明如下表所示。

Timedelta类周期名称、对应单位及其说明

在这里插入图片描述

# 4.3.3 加减时间数据
# 将data['time']数据往后移一天
time1 = data['time'] + pd.Timedelta(days=1)
print(data['time'][:3])  # 原始数据
print(time1[:3])    # 加上一天的数据
# 减
time2 = data['time'] - pd.to_datetime('2023-1-1')
print(time2[:3])    # 减去20223-1-1的数据

在这里插入图片描述

4.3.4 任务实现

# 4.3.4 任务实现
# 处理自己的数据
## 1、时间字符串转换为标准时间格式
print(data.head(3))
# data['timehm'] = pd.to_datetime(data['timehm'])
print(data['TIMESTAMP_START'].dtypes)
data['TIMESTAMP_START'] = pd.PeriodIndex(data['TIMESTAMP_START'], freq='T')
data['TIMESTAMP_END'] = pd.PeriodIndex(data['TIMESTAMP_END'], freq='T')
print(data.head(3))

## 2、提取数据中的年月日信息
y1 = [i.year for i in data['TIMESTAMP_START']]
print(y1[:3])  # 打印年的前三个
m1 = [i.month for i in data['TIMESTAMP_START']]
print(m1[:3])  # 打印月的前三个
d1 = [i.day for i in data['TIMESTAMP_START']]
print(d1[:3])  # 打印日的前三个
## 3、查看时间统计信息
print(data['TIMESTAMP_START'].min())  # 2005-09-28 16:30
print(data['TIMESTAMP_START'].max())  # 2005-09-30 17:00
print(data['TIMESTAMP_START'].max() - data['TIMESTAMP_START'].min()) # 持续时间 <2910 * Minutes>
t = data['TIMESTAMP_END'] - data['TIMESTAMP_START']
print(t)
print(t.min())
print(t.max())

数据

链接:https://pan.baidu.com/s/1AUBdK-MQfpRg8LhOpmKBkw
提取码:6666

全部代码

# 4.3 转换与处理时间序列数据
# 4.3.1 转换字符串时间为标准时间
import pandas as pd
import numpy as np
data = pd.read_csv('E:/Input/ptest.csv')
print(data['time'].head(3))
print(f"转换前:{data['time'].dtypes}")
#  Timestamp类型
data['time'] = pd.to_datetime(data['time'])  # 转换为Timestamp类型
print(f"转换后:{data['time'].dtypes}")
print(data['time'].head(3))
#  Timestamp类型的时间是有限制的
print("最小时间为:", pd.Timestamp.min)
print("最大时间为:", pd.Timestamp.max)

# DatetimeIndex或者PeriodIndex
timeindex = pd.DatetimeIndex(data['time'])
# print(timeindex)
print("转换为DatetimeIndex后:", type(timeindex))
# 常用的时间间隔有Y为年,M为月,D为日,H为小时,T为分钟,S为秒
periodindex = pd.PeriodIndex(data['time'], freq='S')
# print(periodindex)
print("转换为PeriodIndex后:", type(periodindex))

# # 处理我自己的数据时要用到的转换
# print(data['TIMESTAMP_START'].dtypes)
# print(data['TIMESTAMP_START'])
# per = pd.PeriodIndex(data['TIMESTAMP_START'], freq='T')
# print(per)
# print("转换为PeriodIndex后:", type(per))

# 4.3.2 提取时间序列数据信息
y1 = [i.year for i in data['time']]
print(y1[:3])  # 打印年的前三个
m1 = [i.month for i in data['time']]
print(m1[:3])  # 打印月的前三个
d1 = [i.day for i in data['time']]
print(d1[:3])  # 打印日的前三个
h1 = [i.hour for i in data['time']]
print(h1[:3])  # 打印小时前三个
min1 = [i.minute for i in data['time']]
print(min1[:3])  # 打印分钟前三个
s1 = [i.second for i in data['time']]
print(s1[:3])  # 打印秒前三个
w1 = [i.week for i in data['time']]  # 一年中第几个周
print(w1[:3])  # 打印前三个
days = [i.dayofyear for i in data['time']]  # 一年的第几天
print(days[:3])  # 打印前三个

# 4.3.3 加减时间数据
# 将data['time']数据往后移一天
time1 = data['time'] + pd.Timedelta(days=1)
print(data['time'][:3])  # 加之前的数据
print(time1[:3])    # 加上一天的数据
# 减去一个日期‘2023-1-1’
time2 = data['time'] - pd.to_datetime('2023-1-1')
print(time2[:3])    # 减去2023-1-1的数据

# 4.3.4 任务实现
# 处理自己的数据
## 1、时间字符串转换为标准时间格式
print(data.head(3))
# data['timehm'] = pd.to_datetime(data['timehm'])
print(data['TIMESTAMP_START'].dtypes)
data['TIMESTAMP_START'] = pd.PeriodIndex(data['TIMESTAMP_START'], freq='T')
data['TIMESTAMP_END'] = pd.PeriodIndex(data['TIMESTAMP_END'], freq='T')
print(data.head(3))

## 2、提取数据中的年月日信息
y1 = [i.year for i in data['TIMESTAMP_START']]
print(y1[:3])  # 打印年的前三个
m1 = [i.month for i in data['TIMESTAMP_START']]
print(m1[:3])  # 打印月的前三个
d1 = [i.day for i in data['TIMESTAMP_START']]
print(d1[:3])  # 打印日的前三个
## 3、查看时间统计信息
print(data['TIMESTAMP_START'].min())  # 2005-09-28 16:30
print(data['TIMESTAMP_START'].max())  # 2005-09-30 17:00
print(data['TIMESTAMP_START'].max() - data['TIMESTAMP_START'].min()) # 持续时间 <2910 * Minutes>
t = data['TIMESTAMP_END'] - data['TIMESTAMP_START']
print(t)
print(t.min())
print(t.max())

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

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

相关文章

Java知识总结

https://www.bilibili.com/video/BV1ys4y1S7Lc 1、Java中线程的实现方式 为什么说本质上只有一种实现线程的方式&#xff1f;实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里&#xff1f; 实现 Runnable 接口 public class RunnableThread implements Runnable { O…

ai智能改写文案-ai同义转换

文案创作是现代广告营销中不可或缺的一环&#xff0c;一个好的文案不仅可以提升产品的购买率&#xff0c;还可以实现品牌等方面的推广。但是&#xff0c;文案的创作需要耗费大量的时间和精力&#xff0c;如果能够利用智能化技术进行改写&#xff0c;不仅可以大大缩短文案创作时…

JAVA内存不足导致频繁回收和swap引起的性能问题 故障重现(内存篇2)

背景起因&#xff1a; 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行&#xff08;没经历过大并发考验&#xff09;&#xff0c;然而在一次活动后&#xff0c;人数并发一上来后&#xff0c;系统开始卡。 我按经验开始调优&#xff0c;在每个关键步骤…

本地安装directus

简介 Directus 是用于管理 SQL 数据库内容的实时 API 和 App 控制面板。 API会根据数据库模式/内容的实时更改动态更新&#xff08;无需重新启动服务器&#xff09;。 Directus安装在任何新的或现有的 SQL 数据库之上&#xff0c;提供 API 层&#xff08;REST、GraphQL、JS-SD…

获取商品SKU信息API调用代码展示、请求参数和返回值说明

SKU是什么意思 最小存货单位&#xff08;SKU&#xff09;&#xff0c;全称为stock keeping unit&#xff0c;即库存进出计量的基本单元&#xff0c;可以是以件、盒、托盘等为单位。SKU这是对于大型连锁超市DC&#xff08;配送中心&#xff09;物流管理的一个必要的方法。现在已…

MySQL数据库从入门到精通学习第2天(创建数据库)

创建数据库 通过CREATE DATABASE语句来创建数据库通过CREATE SCHEMA语句来创建数据库通过IF NOT EXISTS进行判断创建 通过CREATE DATABASE语句来创建数据库 创建数据库的语法格式如下&#xff1a; CREATE DATABASE 【数据库名】; 创建数据库的库名跟标识符一样也是有要求的&…

实际项目集成分布式一致性协议 Raft

实际项目集成分布式一致性协议 Raft 文章目录 实际项目集成分布式一致性协议 Raft前言1.raft 是什么&#xff1f;2.SOFAJRaft2.1 功能特性 3.Nacos 分布式一致性设计3.1 nacos 分布式协议架构设计3.1 nacos 用 jraft 做什么3.2 Distro 协议 4.实际项目-Spring 工程4.1 旧版项目…

SA168 3BSE003389R1

SA168 3BSE003389R1 远程终端控制系统&#xff08;RTU&#xff09;可连接到其他设备。RTU可将设备上的电气信号转换为数字的值&#xff0c;例如一个开关或阀开/关的状态&#xff0c;或是仪器量测到的压力、流量、电压或电流。也可以借由信号转换及传送信号来控制设备&#xff0…

硬盘分区怎么分?新手该如何操作?

相信很多电脑用户都遇到过硬盘分区的情况。刚拿到手的新电脑&#xff0c;基本上都是一个或两个磁盘分区&#xff0c;这不满足我们的使用习惯&#xff0c;比如我们在不同的分区存放不同的东西&#xff0c;只有一个分区就很难做到&#xff0c;所以这时候需要进行磁盘分区。那么硬…

解读“SAP集成架构咨询方法论”

如果你是SAP ERP相关工作的&#xff0c;建议大家点开原文地址去看&#xff0c;会学习到其他很多与这个行业更多的资料。 原文地址&#xff1a;解读“SAP集成架构咨询方法论” | SAP Blogs 原文地址&#xff1a;解读“SAP集成架构咨询方法论” | SAP Blogs ——————————…

经验分享:如何有效应对Facebook广告数据波动问题?

Facebook广告作为一种重要的数字营销工具&#xff0c;可以帮助企业和品牌快速获得目标受众的关注和转化。然而&#xff0c;由于广告投放过程的不稳定性&#xff0c;Facebook广告数据波动问题也经常出现。 对于广告主而言&#xff0c;如何应对Facebook广告数据波动问题&#xf…

【JVM】JMM

一、JMM JVM 内存模型是用来屏蔽掉各种硬件和操作系统的内存访问差异&#xff0c;以实现让 Java 程序在各个平台下都能达到一致的内存访问效果。JVM 内存模型规定了所有的共享变量都是存储在主内存&#xff0c;每个线程还有自己的工作内存&#xff0c;线程的工作内存保存了该线…

【教学类-34-01】拼图(运动项目)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)

背景需求&#xff1a; 一个月的Python纸类学具研究中&#xff0c;我发现个别男孩喜欢把作业中的数字、图案、单元格剪成小块&#xff08;小卡片&#xff09;进几周&#xff0c;剪条、剪块的孩子人数也慢慢递增。 幼儿需求&#xff1a;锻炼手指精细动作的需求、或者获得更多物…

Idea+maven+spring-cloud项目搭建系列--13 整合MyBatis-Plus多数据源dynamic-datasource

前言&#xff1a;对于同一个系统&#xff0c;不同的租户需要自己独立分隔的数据库&#xff08;每个数据库的表结构可以是相同的&#xff09;&#xff0c;同时也要支持跨数据源的查询&#xff1b;并且支持分布式事务&#xff0c;如果这里不使用分库分表插件&#xff0c;需要怎样…

python-day4(字符串、列表、生成式和生成器、使用元组、集合、字典)

字符串和常用数据结构 简单用法 所谓字符串&#xff0c;就是由零个或多个字符组成的有限序列&#xff0c;一半记为sa1a2a3…an(0<n<∞)。在python中&#xff0c;如果我们把单个或多个字符用单引号或者双引号包围起来&#xff0c;就可以表示一个字符串。 s1 hello, wo…

【生物信息】用隐马尔可夫模型对生物序列进行建模

文章目录 Modeling biological sequences with HMMSParsing longer sequences. 举例子Our frst HMM: Detecting GC-rich regionsRunning the model: Probability of a sequence 维特比算法 Viterbi一个摸球例子回到课堂 求解参数 来自Manolis Kellis教授的课 教了隐马尔可夫在基…

FPGA开发之HDMI Transmitter接口设计

HDMI简介&#xff1a; High Definition Multimedia 高清多媒体接口&#xff0c;一种全数字化视频和声音发送接口&#xff0c;可以发送未压缩的音频及视频信号 物理接口&#xff1a; 电气介绍&#xff1a; TMDS&#xff08;Transition Minimized Differential Signaling&#x…

自定义类型——位段

什么是位段&#xff1f; 位段又叫做位域&#xff0c;具体是一种可以把数据以位的形式紧凑的存储&#xff0c;并允许程序员对此结构位进行操作的数据结构 当结构体的成员变量定义之后浪费了较大的空间 &#xff08;比如int a 2&#xff0c;则浪费了30个比特位的空间&#xff0…

Mail 服务器

Mail 服务器 1. 概念及协议2. 工具2.1 Postfix2.2 dovecot2.3 bind 3. 搭建3.1 DNS服务设置3.2 安装配置 postfix3.3 安装配置 dovecot 4. foxmail验证 1. 概念及协议 邮件服务器也采用的是C/S工作模式&#xff0c;通过SMTP,POP,IMAP协议来是实现邮件的发送和接收的。 SMTP 的…

Java入坑之IO操作

目录 一、IO流的概念 二、字节流 2.1InputStream的方法 2.2Outputstream的方法 2.3资源对象的关闭&#xff1a; 2.4transferTo()方法 2.5readAllBytes() 方法 2.6BufferedReader 和 InputStreamReader 2.7BufferedWriter 和 OutputStreamWriter 三、路径&#xff1a;…