当前位置: 首页 > news >正文

pandas教程:Time Series Basics 时间序列基础

文章目录

  • 11.2 Time Series Basics(时间序列基础)
  • 1 Indexing, Selection, Subsetting(索引,选择,取子集)
  • 2 Time Series with Duplicate Indices(重复索引的时间序列)

11.2 Time Series Basics(时间序列基础)

pandas中,一个基本的时间序列对象,是一个用时间戳作为索引的Series,在pandas外部的话,通常是用python 字符串或datetime对象来表示的:

import pandas as pd
import numpy as np
from datetime import datetime
dates = [datetime(2011, 1, 2), datetime(2011, 1, 5),datetime(2011, 1, 7), datetime(2011, 1, 8), datetime(2011, 1, 10), datetime(2011, 1, 12)]
ts = pd.Series(np.random.randn(6), index=dates)
ts
2011-01-02    0.384868
2011-01-05    0.669181
2011-01-07    2.553288
2011-01-08   -1.808783
2011-01-10    1.180570
2011-01-12   -0.928942
dtype: float64

上面的转化原理是,datetime对象被放进了DatetimeIndex:

ts.index
DatetimeIndex(['2011-01-02', '2011-01-05', '2011-01-07', '2011-01-08','2011-01-10', '2011-01-12'],dtype='datetime64[ns]', freq=None)

像其他的Series一行,数值原色会自动按时间序列索引进行对齐:

ts[::2]
2011-01-02    0.384868
2011-01-07    2.553288
2011-01-10    1.180570
dtype: float64
ts + ts[::2]
2011-01-02    0.769735
2011-01-05         NaN
2011-01-07    5.106575
2011-01-08         NaN
2011-01-10    2.361140
2011-01-12         NaN
dtype: float64

ts[::2]会在ts中,每隔两个元素选一个元素。

pandas中的时间戳,是按numpy中的datetime64数据类型进行保存的,可以精确到纳秒的级别:

ts.index.dtype
dtype('<M8[ns]')

DatetimeIndex的标量是pandasTimestamp对象:

stamp = ts.index[0]
stamp
Timestamp('2011-01-02 00:00:00')

Timestamp可以在任何地方用datetime对象进行替换。

1 Indexing, Selection, Subsetting(索引,选择,取子集)

当我们基于标签进行索引和选择时,时间序列就像是pandas.Series

ts
2011-01-02    0.384868
2011-01-05    0.669181
2011-01-07    2.553288
2011-01-08   -1.808783
2011-01-10    1.180570
2011-01-12   -0.928942
dtype: float64
stamp = ts.index[2]
ts[stamp]
2.5532875030792592

为了方便,我们可以直接传入一个字符串用来表示日期:

ts['1/10/2011']
1.1805698813038874
ts['20110110']
1.1805698813038874

对于比较长的时间序列,我们可以直接传入一年或一年一个月,来进行数据选取:

longer_ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000', periods=1000))
longer_ts
2000-01-01   -0.801668
2000-01-02   -0.325797
2000-01-03    0.047318
2000-01-04    0.239576
2000-01-05   -0.467691
2000-01-06    1.394063
2000-01-07    0.416262
2000-01-08   -0.739839
2000-01-09   -1.504631
2000-01-10   -0.798753
2000-01-11    0.758856
2000-01-12    1.163517
2000-01-13    1.233826
2000-01-14    0.675056
2000-01-15   -1.079219
2000-01-16    0.212076
2000-01-17   -0.242134
2000-01-18   -0.318024
2000-01-19    0.040686
2000-01-20   -1.342025
2000-01-21   -0.130905
2000-01-22   -0.122308
2000-01-23   -0.924727
2000-01-24    0.071544
2000-01-25    0.483302
2000-01-26   -0.264231
2000-01-27    0.815791
2000-01-28    0.652885
2000-01-29    0.203818
2000-01-30    0.007890...   
2002-08-28   -2.375283
2002-08-29    0.843647
2002-08-30    0.069483
2002-08-31   -1.151590
2002-09-01   -2.348154
2002-09-02   -0.309723
2002-09-03   -1.017466
2002-09-04   -2.078659
2002-09-05   -1.828568
2002-09-06    0.546299
2002-09-07    0.861304
2002-09-08   -0.823128
2002-09-09   -0.150047
2002-09-10   -1.984674
2002-09-11    0.468010
2002-09-12   -0.066440
2002-09-13   -1.629502
2002-09-14    0.044870
2002-09-15    0.007970
2002-09-16    0.812104
2002-09-17   -1.835575
2002-09-18   -0.218055
2002-09-19   -0.271351
2002-09-20   -1.852212
2002-09-21    0.546462
2002-09-22    0.776960
2002-09-23   -1.140997
2002-09-24   -2.213685
2002-09-25   -0.586588
2002-09-26   -1.472430
Freq: D, dtype: float64
longer_ts['2001']
2001-01-01    0.588405
2001-01-02   -3.027909
2001-01-03   -0.492280
2001-01-04   -0.807809
2001-01-05   -0.124139
2001-01-06   -0.198966
2001-01-07    2.015447
2001-01-08    1.454119
2001-01-09    0.157505
2001-01-10    1.077689
2001-01-11   -0.246538
2001-01-12   -0.865122
2001-01-13   -0.082186
2001-01-14    1.928050
2001-01-15    0.320741
2001-01-16    0.473770
2001-01-17    0.036649
2001-01-18    1.405034
2001-01-19    0.560502
2001-01-20   -0.695138
2001-01-21    3.318884
2001-01-22    1.704966
2001-01-23    0.145167
2001-01-24    0.366667
2001-01-25   -0.565675
2001-01-26    0.940406
2001-01-27   -1.468772
2001-01-28    0.098759
2001-01-29    0.267449
2001-01-30   -0.221643...   
2001-12-02    0.002522
2001-12-03   -0.046712
2001-12-04    1.825249
2001-12-05   -1.000655
2001-12-06   -0.807582
2001-12-07    0.750439
2001-12-08    1.531707
2001-12-09   -0.195239
2001-12-10   -0.087465
2001-12-11   -0.041450
2001-12-12    1.992200
2001-12-13   -0.294916
2001-12-14    1.215363
2001-12-15    0.029039
2001-12-16   -0.165380
2001-12-17    1.192535
2001-12-18    0.737760
2001-12-19    0.044022
2001-12-20    0.582560
2001-12-21   -0.213569
2001-12-22   -0.024512
2001-12-23   -1.140873
2001-12-24   -1.351333
2001-12-25    0.725253
2001-12-26   -0.943740
2001-12-27   -2.134039
2001-12-28   -0.548597
2001-12-29    1.497907
2001-12-30   -0.594708
2001-12-31    0.068177
Freq: D, dtype: float64

这里,字符串’2001’就直接被解析为一年,然后选中这个时期的数据。我们也可以指定月份:

longer_ts['2001-05']
2001-05-01   -0.560227
2001-05-02    2.160259
2001-05-03   -0.826092
2001-05-04   -0.183020
2001-05-05   -0.294708
2001-05-06   -1.210785
2001-05-07    0.609260
2001-05-08   -1.155377
2001-05-09   -0.127132
2001-05-10    0.576327
2001-05-11   -0.955206
2001-05-12   -2.002019
2001-05-13   -0.969865
2001-05-14    0.820993
2001-05-15    0.557336
2001-05-16   -0.262222
2001-05-17   -0.086760
2001-05-18    0.151608
2001-05-19    1.097604
2001-05-20    0.212148
2001-05-21   -1.164944
2001-05-22   -0.100020
2001-05-23    0.734738
2001-05-24    1.730438
2001-05-25    1.352858
2001-05-26    0.644984
2001-05-27    0.997554
2001-05-28    1.434452
2001-05-29    0.395946
2001-05-30   -0.142523
2001-05-31    1.205485
Freq: D, dtype: float64

利用datetime进行切片(slicing)也没问题:

ts[datetime(2011, 1, 7)]
2.5532875030792592

因为大部分时间序列是按年代时间顺序来排列的,我们可以用时间戳来进行切片,选中一段范围内的时间:

ts
2011-01-02    0.384868
2011-01-05    0.669181
2011-01-07    2.553288
2011-01-08   -1.808783
2011-01-10    1.180570
2011-01-12   -0.928942
dtype: float64
ts['1/6/2011':'1/11/2011']
2011-01-07    2.553288
2011-01-08   -1.808783
2011-01-10    1.180570
dtype: float64

记住,这种方式的切片得到的只是原来数据的一个视图,如果我们在切片的结果上进行更改的的,原来的数据也会变化。

有一个相等的实例方法(instance method)也能切片,truncate,能在两个日期上,对Series进行切片:

ts.truncate(after='1/9/2011')
2011-01-02    0.384868
2011-01-05    0.669181
2011-01-07    2.553288
2011-01-08   -1.808783
dtype: float64

所有这些都适用于DataFrame,我们对行进行索引:

dates = pd.date_range('1/1/2000', periods=100, freq='W-WED')
long_df = pd.DataFrame(np.random.randn(100, 4),index=dates,columns=['Colorado', 'Texas','New York', 'Ohio'])
long_df.loc['5-2001']
ColoradoTexasNew YorkOhio
2001-05-02-0.4775170.7226850.337141-0.345072
2001-05-09-0.401860-0.4758210.685129-0.809288
2001-05-161.9005410.348590-0.805042-0.410077
2001-05-23-0.2208701.654666-0.846395-0.207802
2001-05-302.094319-0.9725881.276059-1.056146

2 Time Series with Duplicate Indices(重复索引的时间序列)

在某些数据中,可能会遇到多个数据在同一时间戳下的情况:

dates = pd.DatetimeIndex(['1/1/2000', '1/2/2000', '1/2/2000', '1/2/2000', '1/3/2000'])
dup_ts = pd.Series(np.arange(5), index=dates)
dup_ts
2000-01-01    0
2000-01-02    1
2000-01-02    2
2000-01-02    3
2000-01-03    4
dtype: int64

我们通过is_unique属性来查看index是否是唯一值:

dup_ts.index.is_unique
False

对这个时间序列取索引的的话, 要么得到标量,要么得到切片,这取决于时间戳是否是重复的:

dup_ts['1/3/2000'] # not duplicated
4
dup_ts['1/2/2000'] # duplicated
2000-01-02    1
2000-01-02    2
2000-01-02    3
dtype: int64

假设我们想要聚合那些有重复时间戳的数据,一种方法是用groupby,设定level=0:

grouped = dup_ts.groupby(level=0)
grouped.mean()
2000-01-01    0
2000-01-02    2
2000-01-03    4
dtype: int64
grouped.count()
2000-01-01    1
2000-01-02    3
2000-01-03    1
dtype: int64

相关文章:

pandas教程:Time Series Basics 时间序列基础

文章目录 11.2 Time Series Basics&#xff08;时间序列基础&#xff09;1 Indexing, Selection, Subsetting&#xff08;索引&#xff0c;选择&#xff0c;取子集&#xff09;2 Time Series with Duplicate Indices&#xff08;重复索引的时间序列&#xff09; 11.2 Time Seri…...

【C++初阶】STL详解(四)vector的模拟实现

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…...

Zookeeper学习笔记(2)—— Zookeeper API简单操作

前置知识&#xff1a;Zookeeper学习笔记&#xff08;1&#xff09;—— 基础知识-CSDN博客 Zookeeper集群搭建部分 前提&#xff1a;保证zookeeper集群处于启动状态 环境搭建 依赖配置 <dependencies><dependency><groupId>junit</groupId><arti…...

YOLOv8-Seg改进:Backbone改进 |Next-ViT堆栈NCB和NTB 构建先进的CNN-Transformer混合架构

🚀🚀🚀本文改进:Next-ViT堆栈NCB和NTB 构建先进的CNN-Transformer混合架构,包括nextvit_small, nextvit_base, nextvit_large,相比较yolov8-seg各个版本如下: layersparametersgradientsGFLOPsnextvit_small61033841075...

DocCMS keyword SQL注入漏洞复现 [附POC]

文章目录 DocCMS keyword SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 DocCMS keyword SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测…...

利用(Transfer Learning)迁移学习在IMDB数据上训练一个文本分类模型

1. 背景 有些场景下&#xff0c;开始的时候数据量很小&#xff0c;如果我们用一个几千条数据训练一个全新的深度机器学习的文本分类模型&#xff0c;效果不会很好。这个时候你有两种选择&#xff0c;1.用传统的机器学习训练&#xff0c;2.利用迁移学习在一个预训练的模型上训练…...

pom.xml格式化快捷键

在软件开发和编程领域&#xff0c;"格式化"通常指的是将代码按照一定的规范和风格进行排列&#xff0c;以提高代码的可读性和维护性。格式化代码有助于使代码结构清晰、统一&#xff0c;并符合特定的编码规范。 格式化可以包括以下方面&#xff1a; 缩进&#xff1a…...

【短文】【踩坑】可以在Qt Designer给QTableWidge添加右键菜单吗?

2023年11月18日&#xff0c;周六上午 今天早上在网上找了好久都没找到教怎么在Qt Designer给QTableWidge添加右键菜单的文章 答案是&#xff1a;不可以 在Qt Designer中无法直接为QTableWidget添加右键菜单。 Qt Designer主要用于创建界面布局和设计&#xff0c;无法直接添加…...

Git常用配置

git log 美化输出 全局配置参数 git config --global alias.lm "log --no-merges --color --dateformat:%Y-%m-%d %H:%M:%S --authorghost --prettyformat:%Cred%h%Creset - %Cgreen(%cd)%C(yellow)%d%Cblue %s %C(bold blue)<%an>%Creset --abbrev-commit"…...

力扣每日一题-数位和相等数对的最大和-2023.11.18

力扣每日一题&#xff1a;数位和相等数对的最大和 开篇 这道每日一题还是挺需要思考的&#xff0c;我绕晕了好久&#xff0c;根据题解的提示才写出来。 题目链接:2342.数位和相等数对的最大和 题目描述 代码思路 1.创建一个数组存储每个数位的数的最大值&#xff0c;创建一…...

【win32_001】win32命名规、缩写、窗口

整数类型 bool类型 使用注意&#xff1a; 一般bool 的false0&#xff1b;true1 | 2 | …|n false是为0&#xff0c;true是非零 不建议这样用&#xff1a; if (result TRUE) // Wrong! 因为result不一定只返回1&#xff08;true&#xff09;&#xff0c;当返回2时&#xff0c…...

机器学习第8天:SVM分类

文章目录 机器学习专栏 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 非线性SVM分类 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用&#xff1a;判别种类 原理&#xff1a;找出一个决策边界&#xff0c;判断数据所处区域来识别种类 简单…...

AI工具合集

网站&#xff1a;未来百科 | 为发现全球优质AI工具产品而生 (6aiq.com) 如今&#xff0c;AI技术涉及到了很多领域&#xff0c;比如去水印、一键抠图、图像处理、AI图像生成等等。站长之家之前也分享过一些&#xff0c;但是在网上要搜索找到它们还是费一些功夫。 今天发现了一…...

代码随想录算法训练营Day 54 || 392.判断子序列、115.不同的子序列

392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;&quo…...

C 语言 gets()和puts()

C 语言 gets()和puts() gets()和puts()在头文件stdio.h中声明。这两个函数用于字符串的输入/输出操作。 C gets()函数 gets()函数使用户可以输入一些字符&#xff0c;然后按Enter键。 用户输入的所有字符都存储在字符数组中。 空字符将添加到数组以使其成为字符串。 gets()允…...

核—幂零分解

若向量空间 V \mathcal V V存在子空间 X \mathcal X X与 Y \mathcal Y Y&#xff0c;当 X Y V X ∩ Y 0 \mathcal {X\text{}Y\text{}V}\\ \mathcal {X}\cap \mathcal {Y}0 XYVX∩Y0 时称子空间 X \mathcal X X与 Y \mathcal Y Y是完备的&#xff0c;其中记为 X ⊕ Y V \ma…...

轻松掌控财务,分析账户花销,明细记录支出情况

随着科技的发展&#xff0c;我们的生活变得越来越智能化。然而&#xff0c;对于许多忙碌的现代人来说&#xff0c;管理财务可能是一件令人头疼的事情。复杂的账单、花销、收入&#xff0c;这些可能会让你感到无从下手。但现在&#xff0c;我们有一个全新的解决方案——一款全新…...

竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …...

11. Spring源码篇之实例化前的后置处理器

简介 spring在创建Bean的过程中&#xff0c;提供了很多个生命周期&#xff0c;实例化前就是比较早的一个生命周期&#xff0c;顾名思义就是在Bean被实例化之前的处理&#xff0c;这个时候还没实例化&#xff0c;只能拿到该Bean的Class对象&#xff0c;如果在这个时候直接返回一…...

Python-Python高阶技巧:HTTP协议、静态Web服务器程序开发、循环接收客户端的连接请求

版本说明 当前版本号[20231114]。 版本修改说明20231114初版 目录 文章目录 版本说明目录HTTP协议1、网址1.1 网址的概念1.2 URL的组成1.3 知识要点 2、HTTP协议的介绍2.1 HTTP协议的概念及作用2.2 HTTP协议的概念及作用2.3 浏览器访问Web服务器的过程 3、HTTP请求报文3.1 H…...

AI能力已经成为2026年的分水岭:2026年企业如何选对人力资源管理平台

HR SaaS系统是基于云端部署的人力资源管理软件&#xff0c;帮助企业实现招聘、人事、绩效、薪酬等HR业务的数字化管理。2026年的HR SaaS已经从传统的流程工具进化为AI驱动的智能管理平台&#xff0c;能够自动处理简历筛选、智能推荐人才、生成绩效面谈纪要等复杂任务&#xff0…...

【微知】Mellanox网卡配置异常?mlxconfig reset全解与实战场景指南

1. Mellanox网卡配置异常&#xff1f;先别慌 遇到Mellanox网卡配置异常时&#xff0c;很多工程师第一反应是重装驱动或者更换硬件。其实在大多数情况下&#xff0c;用对mlxconfig reset这个神器就能快速解决问题。我处理过上百台配备Mellanox网卡的服务器&#xff0c;发现80%的…...

javaweb铁路火车接发车课程作业培训考试系统证书

目录同行可拿货,招校园代理 ,本人源头供货商铁路火车接发车课程作业培训考试系统证书的功能分析系统概述功能模块分析技术实现要点行业合规性扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 …...

javaweb蔚来新能源汽车对比推荐平台设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块设计技术实现方案数据安全措施扩展功能设计项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块设计 用户管理模块 实现用户注…...

从华为实践学IPD:手把手教你写高通过率的Charter文档

华为IPD方法论实战&#xff1a;打造高价值Charter文档的7个关键步骤 在科技企业的研发管理领域&#xff0c;一份优秀的Charter文档往往决定着数千万甚至上亿研发投入的成败。华为IPD&#xff08;集成产品开发&#xff09;体系中的Charter开发流程&#xff0c;被全球众多科技企业…...

DeerFlow部署全攻略:简单几步,打造你的专属AI研究工作站

DeerFlow部署全攻略&#xff1a;简单几步&#xff0c;打造你的专属AI研究工作站 1. 引言&#xff1a;你的个人深度研究助理来了 想象一下&#xff0c;你正在为一个复杂的项目做调研&#xff0c;需要收集资料、分析数据、撰写报告&#xff0c;甚至还要制作演示文稿。传统的方式…...

从零到集群:基于Rocky Linux ARM64的虚拟化平台构建与自动化部署实战

1. 环境准备与基础配置 第一次接触ARM64架构的虚拟化平台搭建时&#xff0c;我踩过不少坑。不同于常见的x86环境&#xff0c;Rocky Linux ARM64在驱动支持和软件生态上有其特殊性。我们先从最基础的物理服务器配置说起。 假设你面前是一台刚拆封的ARM架构服务器&#xff0c;我…...

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生

Windows右键菜单终极清理指南&#xff1a;3步让你的右键菜单重获新生 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为每次右键点击文件时弹出的杂乱菜单而…...

大学物理电磁场公式

1,毕奥-萨伐尔定律 2,安培定律(电流连续性) 3,库伦定律 如果两个电荷电量为q1和q2,距离为r,它们受到相互间作用力F 同种电荷互相吸引,不同电荷相互排斥; 电荷作用力大小与电荷大小成正比,与距离平方成反比; 作用力方向与电荷连线方向相反或一致 4,法拉第定律 5…...

MIL图像库实战:从采集卡配置到Qt应用开发

1. 工业视觉项目开发全流程解析 第一次接触MIL图像库时&#xff0c;我被它强大的硬件抽象能力震撼到了。这个由Matrox开发的图像处理库&#xff0c;就像一位经验丰富的翻译官&#xff0c;把不同品牌采集卡的硬件差异统统屏蔽掉。想象一下&#xff0c;你手里有Basler、AVT、Dals…...