【Pandas入门教程】如何轻松处理时间序列数据

news2024/11/17 11:37:02

如何轻松处理时间序列数据

来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study

在这里插入图片描述

文章目录

    • 如何轻松处理时间序列数据
        • 导包
        • 数据准备
        • 【1】使用Pandas日期时间属性
        • 【2】日期时间作为索引
        • 【3】将时间序列重新采样为另一个频率
        • 【小结】

导包

import pandas as pd
import matplotlib.pyplot as plt

数据准备

air_quality_no2_long.csv"数据集提供 N O 2 NO_2 NO2 分别位于巴黎、安特卫普和伦敦的 FR04014、BETR801 和伦敦威斯敏斯特测量站的值。

air_quality = pd.read_csv("air_quality_no2_long.csv")
air_quality = air_quality.rename(columns={"date.utc": "datetime"})
air_quality.head()
citycountrydatetimelocationparametervalueunit
0ParisFR2019-06-21 00:00:00+00:00FR04014no220.0µg/m³
1ParisFR2019-06-20 23:00:00+00:00FR04014no221.8µg/m³
2ParisFR2019-06-20 22:00:00+00:00FR04014no226.5µg/m³
3ParisFR2019-06-20 21:00:00+00:00FR04014no224.9µg/m³
4ParisFR2019-06-20 20:00:00+00:00FR04014no221.4µg/m³
air_quality.city.unique()
array(['Paris', 'Antwerpen', 'London'], dtype=object)

【1】使用Pandas日期时间属性

我想将日期时间列中的日期用作datetime对象而不是纯文本

air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])
air_quality["datetime"]
0      2019-06-21 00:00:00+00:00
1      2019-06-20 23:00:00+00:00
2      2019-06-20 22:00:00+00:00
3      2019-06-20 21:00:00+00:00
4      2019-06-20 20:00:00+00:00
                  ...           
2063   2019-05-07 06:00:00+00:00
2064   2019-05-07 04:00:00+00:00
2065   2019-05-07 03:00:00+00:00
2066   2019-05-07 02:00:00+00:00
2067   2019-05-07 01:00:00+00:00
Name: datetime, Length: 2068, dtype: datetime64[ns, UTC]

最初,datetime 中的值是字符串,不提供任何日期时间操作(例如,提取年份、星期几,…)。通过应用 to_datetime 函数,pandas 解释字符串并将其转换为日期时间(即 datetime64[ns, UTC])对象。在 pandas 中,我们将这些类似于标准库中datetime.datetime 对象称为 pandas.Timestamp.

由于许多数据集在其中一列中包含日期时间信息,因此 pandas.read_csv() 和 pandas.read_json() 等 pandas 输入函数可以在使用 parse_dates 参数读取数据时转换为日期,并列出要读取为 Timestamp 的列表:

pd.read_csv("…/data/air_quality_no2_long.csv", parse_dates=[“datetime”])

为什么这些pandas.Timestamp对象有用吗?【举些栗子】

我们正在处理的时间序列数据集的开始和结束日期是什么?

air_quality["datetime"].min(), air_quality["datetime"].max()
(Timestamp('2019-05-07 01:00:00+0000', tz='UTC'),
 Timestamp('2019-06-21 00:00:00+0000', tz='UTC'))

使用pandas.Timestamp日期时间的时间戳使我们能够使用日期信息进行计算并使它们具有可比性。因此,我们可以使用它来获取时间序列的长度:

air_quality["datetime"].max() - air_quality["datetime"].min()
Timedelta('44 days 23:00:00')

结果是一个 pandas.Timedelta 对象,类似于标准 Python 库中的 datetime.timedelta,并定义了持续时间。

我想向DataFrame添加一个仅包含测量月份的新列

air_quality["month"] = air_quality["datetime"].dt.month
air_quality.head()
citycountrydatetimelocationparametervalueunitmonth
0ParisFR2019-06-21 00:00:00+00:00FR04014no220.0µg/m³6
1ParisFR2019-06-20 23:00:00+00:00FR04014no221.8µg/m³6
2ParisFR2019-06-20 22:00:00+00:00FR04014no226.5µg/m³6
3ParisFR2019-06-20 21:00:00+00:00FR04014no224.9µg/m³6
4ParisFR2019-06-20 20:00:00+00:00FR04014no221.4µg/m³6

通过使用日期的Timestamp对象,pandas提供了许多与时间相关的属性。例如month,还有year、weekofyear、quarter,…所有这些属性都可以由 dt 访问器访问。

什么是平均值 N O 2 NO_2 NO2 每个测量位置一周中每天的浓度?

air_quality.groupby([air_quality["datetime"].dt.weekday, "location"])["value"].mean()
datetime  location          
0         BETR801               27.875000
          FR04014               24.856250
          London Westminster    23.969697
1         BETR801               22.214286
          FR04014               30.999359
          London Westminster    24.885714
2         BETR801               21.125000
          FR04014               29.165753
          London Westminster    23.460432
3         BETR801               27.500000
          FR04014               28.600690
          London Westminster    24.780142
4         BETR801               28.400000
          FR04014               31.617986
          London Westminster    26.446809
5         BETR801               33.500000
          FR04014               25.266154
          London Westminster    24.977612
6         BETR801               21.896552
          FR04014               23.274306
          London Westminster    24.859155
Name: value, dtype: float64

还记得 groupby 在统计计算教程中提供的拆分-应用-组合模式吗?在这里,我们要计算一个给定的统计量(例如平均值 N O 2 NO_2 NO2 ) 对于每个工作日和每个测量位置。为了在工作日分组,我们使用 pandas Timestamp的日期时间属性weekday(星期一=0 和星期日=6),dt 访问器也可以访问该属性。可以对位置和工作日进行分组,以拆分每个组合的均值计算。

绘制典型 N O 2 NO_2 NO2 我们所有站的时间序列中的模式。换句话说,一天中每个小时的平均值是多少?

fig, axs = plt.subplots(figsize=(12, 4))
air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean().plot(kind='bar', rot=0, ax=axs)
plt.xlabel("Hour of the day")
plt.ylabel("$NO_2 (µg/m^3)$")
Text(0, 0.5, '$NO_2 (µg/m^3)$')

在这里插入图片描述

与前一种情况类似,我们想要计算给定的统计量(例如平均值 N O 2 NO_2 NO2 ) 对于一天中的每一个小时,我们可以再次使用拆分-应用-组合方法。对于这种情况,我们使用 pandas Timestamp的日期时间属性 hour,它也可以通过 dt 访问器访问。

【2】日期时间作为索引

引入 pivot() 来重塑数据表,并将每个测量位置作为单独的列

no_2 = air_quality.pivot(index="datetime", columns="location", values="value")
no_2.head()
locationBETR801FR04014London Westminster
datetime
2019-05-07 01:00:00+00:0050.525.023.0
2019-05-07 02:00:00+00:0045.027.719.0
2019-05-07 03:00:00+00:00NaN50.419.0
2019-05-07 04:00:00+00:00NaN61.916.0
2019-05-07 05:00:00+00:00NaN72.4NaN

通过透视数据,日期时间信息成为表的索引。通常,可以通过set_index函数将列设置为索引。

使用日期时间索引(即DatetimeIndex)提供了强大的功能。例如,我们不需要 dt 访问器来获取时间序列属性,而是直接在索引上提供这些属性:

no_2.index.year, no_2.index.weekday
(Int64Index([2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
             ...
             2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019],
            dtype='int64', name='datetime', length=1033),
 Int64Index([1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
             ...
             3, 3, 3, 3, 3, 3, 3, 3, 3, 4],
            dtype='int64', name='datetime', length=1033))

其他一些优点是方便的时间段子集或图上适应的时间尺度。

创建 N O 2 NO_2 NO2 从5月20日到5月21日结束的不同站的值

no_2["2019-05-20":"2019-05-21"].plot()
<AxesSubplot:xlabel='datetime'>

在这里插入图片描述

通过提供解析为日期时间的字符串,可以在 DatetimeIndex 上选择数据的特定子集.

【3】将时间序列重新采样为另一个频率

将当前每小时时间序列值聚合为每个站点中的每月最大值。

monthly_max = no_2.resample("M").max()
monthly_max
locationBETR801FR04014London Westminster
datetime
2019-05-31 00:00:00+00:0074.597.097.0
2019-06-30 00:00:00+00:0052.584.752.0

使用日期时间索引的时间序列数据的一个非常强大的方法是能够resample()另一个频率(例如,将次要数据转换为 5 分钟数据)。

resample() 方法类似于 groupby 操作:

  • 它通过使用定义目标频率的字符串(例如 M、5H,…)提供基于时间的分组
  • 它需要一个聚合函数,例如mean、max,…

定义后,时间序列的频率由 freq 属性提供:

monthly_max.index.freq
<MonthEnd>

绘制每日平均值图 N O 2 NO_2 NO2 每个站的价值。

no_2.resample("D").mean().plot(style="-o", figsize=(10, 5))
<AxesSubplot:xlabel='datetime'>

在这里插入图片描述

【小结】

可以使用to_datetime函数或作为读取函数的一部分将有效的日期字符串转换为日期时间对象。

pandas 中的日期时间对象支持使用 dt 访问器的计算、逻辑运算和方便的日期相关属性。

日期DatetimeIndex包含这些与日期相关的属性,并支持方便的切片。

Resample是更改时间序列频率的强大方法。

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

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

相关文章

RV1126笔记十八:吸烟行为检测及部署<五>

若该文为原创文章,转载请注明原文出处。 ubuntu16.04上搭建转化成RKNN环境并把onnx转成RKNN模型(ubuntu16.04) onnx模型转rknn模型需要用到py3.8,所以搭建环境在转换,下面全部操作都是虚拟机下进行。 注意:转模型用py3.6, 训练用py3.8 一、miniconda安装 1、下载地址…

tensorflow01——安装,结构

从官网安装anaconda 安装tensorflow 注意tensorflow对应特定的python版本如3.6&#xff0c;3.7 直接从官网下载的anaconda会对应下载最新版本的python3.9 所以需要新建一个环境来装我们的tensorflow和它对应的python &#xff08;macbook m2&#xff09; 01创建新的环境命名…

【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)

文章内容&#xff1a;二代身份证号码的组成结构&#xff08;含校验码算法与行政区划代码&#xff09; 关键词组&#xff1a;身份证号码、组成、校验码、行政区划码 使用软件&#xff1a;无 虚拟环境&#xff1a;无 操作系统&#xff1a;Windows 11 【图源中国政府网】 文章目录…

node.js+uni计算机毕设项目广播剧微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

Node.js - 模块化

文章目录目标一、模块化的基本概念1、什么是模块化&#xff08;1&#xff09;现实生活中的模块化&#xff08;2&#xff09;编程领域中的模块化2、模块化规范二、Node.js 中模块化1、Node.js 中模块的分类2、加载模块3、Node.js 中的模块作用域&#xff08;1&#xff09;什么是…

创新!京东T7开创“新算法宝典”,图文并茂,全新演绎,太酷了

导言 算法是一门学问&#xff0c;但却总遭到一些程序员的冷落。现在的开发人员&#xff0c;更热衷于编程语言的修炼&#xff0c;以应付面试需求时的需要&#xff0c;所以对算法的学习&#xff0c;稍许忽略了些。实际上&#xff0c;近些年来&#xff0c;各互联网公司对于算法的…

画出一阶系统单位阶跃响应、单位脉冲响应、单位斜坡响应曲线

画出一阶系统单位阶跃响应、单位脉冲响应、单位斜坡响应曲线 t0:0.1:7; num[1]; den[1 1]; figure; c1impulse(num,den,t); plot(t,c1,‘b-’); xlabel(‘t/s’);ylabel(‘c(t)’);grid on; figure; c2step(num,den,t); plot(t,ones(size(t)),‘r-’,t,c2,‘b-’); xlabel(‘t…

Java中File文件操作类的详细使用介绍

文章目录File类的使用File的介绍File常用API判断文件类型-获取文件信息创建文件-删除文件功能遍历文件夹File类的使用 File的介绍 File的概述: File类在包java.io.File下、代表操作系统的文件对象&#xff08;文件、文件夹&#xff09;。 File类提供了诸如&#xff1a;定位文…

神级框架 - MyBatis【进阶】

目录 1. 单表查询的进阶知识 1.1 参数占位符 #{} 和 ${} 的区别 1.1.1 #{} 和 ${} 的区别一 (#{} 胜一分) 1.1.2 #{} 和 ${} 的区别二 (${} 胜一分) 1.1.3 #{} 和 ${} 的区别三 - 最主要的区别 (${} 惨败) 1.2 like 查询 2. 多表查询的进阶知识 2.1 查询的返回类型: res…

node.js+uni计算机毕设项目基于微信平台的小龙虾养殖管理程序设计(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

【Lilishop商城】No4-1.业务逻辑的代码开发,涉及到:会员B端第三方登录使用及后端接口(微信、QQ等)

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…

Mycat2(二)windows搭建mycat2、mycat2相关概念、配置文件解释

文章目录windows搭建mycat2步骤下载mycat2修改配置并启动mycat2命令mycat2相关概念mycat2配置文件用户相关配置属性数据源datasources集群cluster相关配置逻辑库表schemas配置windows搭建mycat2步骤 修改C:\Windows\System32\drivers\etc下的hosts文件&#xff0c;防止dns污染…

node.js+uni计算机毕设项目基于微信小程序某企业考勤系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

「设计模式」享元模式

「设计模式」享元模式 文章目录「设计模式」享元模式[toc]一、概述二、结构三、案例实现四、优缺点五、JDK中的享元模式六、小结一、概述 在面向对象程序设计过程中&#xff0c;有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源&#x…

node.js+uni计算机毕设项目个人财务管理小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

《图解TCP/IP》阅读笔记(第六章 6.5、6.6)——其他代表性的传输层协议与UDP、TCP首部

6.5 其他传输层协议 实际上&#xff0c;UDP与TCP在很长的一段时间&#xff0c;霸占了“传输至尊榜”中的前两位&#xff0c;难以分出高下&#xff0c;但是仍有几款“神兵利器”&#xff0c;被收入兵器榜前十位&#xff0c;接下来就来介绍一些已经被提案且在今后可能会被广泛使…

控制图简明原理及Plotly实现控制图Python实践

1. 控制图简明原理 1.1. 关于控制图概述 控制图&#xff08;Control Chart&#xff09;又叫管制图&#xff0c;图上有三条平行于横轴的直线&#xff1a;中心线&#xff08;CL&#xff0c;Central Line&#xff09;、上控制限&#xff08;UCL&#xff0c;Upper Control Limit&…

2023跨面代码(烟花+自定义文字+背景音乐+雪花+倒计时)

2023年快要到来啦&#xff0c;很高兴这次我们又能一起度过~ 目录 一、前言 二、跨年烟花 三、效果展示 倒计时 2023​编辑 兔圆圆​编辑 四、编码实现 index.html 烟花&#xff0c;雪花&#xff0c;背景音乐&#xff0c;页面样式 index.js 自定义文字 五、获取代码 需…

RabbitMQ 第一天 基础 2 RabbitMQ 的安装配置 2.2 RabbitMQ 管控台使用

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础2 RabbitMQ 的安装配置2.2 RabbitMQ 管控台使用2.2.1 RabbitMQ 控制台的使用第一天 基础 2 RabbitMQ 的安装配置 2.2 RabbitMQ 管控台使用 2.2.1 RabbitMQ 控制台…

算法学习笔记

最近无意中看到一个算法的网站&#xff0c;看着感觉介绍得挺系统的&#xff0c;虽然做算法以及指导学生开发各种算法这么些年了&#xff0c;却没有真正系统的学习过&#xff08;几年前啃过算法导论&#xff0c;但是苦于那蹩脚的中文翻译&#xff0c;也没有去看英文原文&#xf…