前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Pandas时序数据处理入门

Pandas时序数据处理入门

作者头像
AiTechYun
发布于 2019-09-08 06:31:52
发布于 2019-09-08 06:31:52
4.3K00
代码可运行
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号
运行总次数:0
代码可运行

作为一个几乎每天处理时间序列数据的人,我发现pandas Python包对于时间序列的操作和分析非常有用。

使用pandas操作时间序列数据的基本介绍开始前需要您已经开始进行时间序列分析。因为我们的具体目标是向你展示下面这些:

  • 1、创建一个日期范围
  • 2、处理时间戳数据
  • 3、将字符串数据转换为时间戳
  • 4、数据帧中索引和切片时间序列数据
  • 5、重新采样不同时间段的时间序列汇总/汇总统计数据
  • 6、计算滚动统计数据,如滚动平均
  • 7、处理丢失的数据
  • 8、了解unix/epoch时间的基本知识
  • 9、了解时间序列数据分析的常见陷阱

让我们开始吧。如果想要处理已有的实际数据,可以从使用pandas read_csv将文件读入数据帧开始,但是我们将从处理生成的数据开始。

首先导入我们将使用的库,然后使用它们创建日期范围

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
from datetime import datetime
import numpy as npdate_rng = pd.date_range(start='1/1/2018', end='1/08/2018', freq='H')
}

此日期范围具有每小时频率的时间戳。如果我们调用date_rng,我们会看到它如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 01:00:00',
               '2018-01-01 02:00:00', '2018-01-01 03:00:00',
               '2018-01-01 04:00:00', '2018-01-01 05:00:00',
               '2018-01-01 06:00:00', '2018-01-01 07:00:00',
               '2018-01-01 08:00:00', '2018-01-01 09:00:00',
               ...
               '2018-01-07 15:00:00', '2018-01-07 16:00:00',
               '2018-01-07 17:00:00', '2018-01-07 18:00:00',
               '2018-01-07 19:00:00', '2018-01-07 20:00:00',
               '2018-01-07 21:00:00', '2018-01-07 22:00:00',
               '2018-01-07 23:00:00', '2018-01-08 00:00:00'],
               dtype='datetime64[ns]', length=169, freq='H')

}

我们可以检查第一个元素的类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type(date_rng[0])
#returns
pandas._libs.tslib.Timestamp
}

让我们用时间戳数据创建一个示例数据框架,并查看前15个元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df.head(15)
}

如果我们想做时间序列操作,我们需要一个日期时间索引,以便我们的数据帧在时间戳上建立索引。

将数据帧索引转换为datetime索引,然后显示第一个元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['datetime'] = pd.to_datetime(df['date'])
df = df.set_index('datetime')
df.drop(['date'], axis=1, inplace=True)
df.head()
}

如果数据中的“时间”戳实际上是字符串类型,而不是数字类型呢?让我们将date_rng转换为字符串列表,然后将字符串转换为时间戳。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string_date_rng = [str(x) for x in date_rng]
string_date_rng
#returns['2018-01-01 00:00:00',
 '2018-01-01 01:00:00',
 '2018-01-01 02:00:00',
 '2018-01-01 03:00:00',
 '2018-01-01 04:00:00',
 '2018-01-01 05:00:00',
 '2018-01-01 06:00:00',
 '2018-01-01 07:00:00',
 '2018-01-01 08:00:00',
 '2018-01-01 09:00:00',...
}

我们可以通过推断字符串的格式将其转换为时间戳,然后查看这些值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timestamp_date_rng = pd.to_datetime(string_date_rng, infer_datetime_format=True)
timestamp_date_rng
#returnsDatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 01:00:00',
               '2018-01-01 02:00:00', '2018-01-01 03:00:00',
               '2018-01-01 04:00:00', '2018-01-01 05:00:00',
               '2018-01-01 06:00:00', '2018-01-01 07:00:00',
               '2018-01-01 08:00:00', '2018-01-01 09:00:00',
               ...
               '2018-01-07 15:00:00', '2018-01-07 16:00:00',
               '2018-01-07 17:00:00', '2018-01-07 18:00:00',
               '2018-01-07 19:00:00', '2018-01-07 20:00:00',
               '2018-01-07 21:00:00', '2018-01-07 22:00:00',
               '2018-01-07 23:00:00', '2018-01-08 00:00:00'],
              dtype='datetime64[ns]', length=169, freq=None)
}

但是如果我们需要转换一个唯一的字符串格式呢?

让我们创建一个任意的字符串日期列表,并将其转换为时间戳:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string_date_rng_2 = ['June-01-2018', 'June-02-2018', 'June-03-2018']
timestamp_date_rng_2 = [datetime.strptime(x,'%B-%d-%Y') for x in string_date_rng_2]
timestamp_date_rng_2
#returns
[datetime.datetime(2018, 6, 1, 0, 0),
 datetime.datetime(2018, 6, 2, 0, 0),
 datetime.datetime(2018, 6, 3, 0, 0)]
}

如果我们把它放入一个数据帧中,它会是什么样子?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df2 = pd.DataFrame(timestamp_date_rng_2, columns=['date'])
df2
}

回到我们最初的数据框架,让我们通过解析时间戳索引来查看数据:

假设我们只想查看日期为每月2日的数据,我们可以使用如下索引。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df[df.index.day == 2]
}

顶部是这样的:

我们还可以通过数据帧的索引直接调用要查看的日期:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['2018-01-03']
}

在特定日期之间选择数据如何?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['2018-01-04':'2018-01-06']
}

我们已经填充的基本数据帧为我们提供了每小时频率的数据,但是我们可以以不同的频率对数据重新采样,并指定我们希望如何计算新采样频率的汇总统计。我们可以按照下面的示例,以日频率而不是小时频率,获取数据的最小值、最大值、平均值、总和等,其中我们计算数据的日平均值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.resample('D').mean()
}

窗口统计数据,比如滚动平均值或滚动和呢?

让我们在原始df中创建一个新列,该列计算3个窗口期间的滚动和,然后查看数据帧的顶部:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['rolling_sum'] = df.rolling(3).sum()
df.head(10)
}

我们可以看到,这是正确的计算,只有当有三个周期可以回顾时,它才开始具有有效值。

这是一个很好的机会,可以看到当处理丢失的数据值时,我们如何向前或向后填充数据。

这是我们的df,但有一个新的列,采取滚动和和回填数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['rolling_sum_backfilled'] =    

df['rolling_sum'].fillna(method='backfill'    

df.head(10)
}

能够用实际值(如时间段的平均值)填充丢失的数据通常很有用,但请始终记住,如果您正在处理时间序列问题并希望数据真实,则不应像查找未来和获取你在那个时期永远不会拥有的信息。您可能希望更频繁地向前填充数据,而不是向后填充。

在处理时间序列数据时,可能会遇到UNIX时间中的时间值。Unix Time,也称为Epoch Time是自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数。使用Unix时间有助于消除时间戳的歧义,这样我们就不会被时区、夏令时等混淆。

下面是一个时间t的例子,它是以Epoch Time表示的,并将unix/epoch时间转换为以UTC表示的常规时间戳:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
epoch_t = 1529272655
real_t = pd.to_datetime(epoch_t, unit='s')
real_t
#returns
Timestamp('2018-06-17 21:57:35')
}

如果我想将以UTC为单位的时间转换为我自己的时区,我可以简单地执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
real_t.tz_localize('UTC').tz_convert('US/Pacific')
#returns
Timestamp('2018-06-17 14:57:35-0700', tz='US/Pacific')
}

有了这些基础知识,您应该可以使用时间序列数据。

以下是在处理时间序列数据时要记住的一些技巧和要避免的常见陷阱:

  • 1、检查您的数据中是否有可能由特定地区的时间变化(如夏令时)引起的差异。
  • 2、仔细跟踪时区-让其他人通过查看您的代码,了解您的数据所在的时区,并考虑转换为UTC或标准值,以保持数据的标准化。
  • 3、丢失的数据可能经常发生-确保您记录了您的清洁规则,并且考虑到不回填您在采样时无法获得的信息。
  • 4、请记住,当您对数据重新取样或填写缺少的值时,您将丢失有关原始数据集的一定数量的信息。我建议您跟踪所有的数据转换,并跟踪数据问题的根本原因。
  • 5、当您对数据重新取样时,最佳方法(平均值、最小值、最大值、和等等)将取决于您拥有的数据类型和取样方式。要考虑如何重新对数据取样以便进行分析。

原文链接:

https://towardsdatascience.com/basic-time-series-manipulation-with-pandas-4432afee64ea

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.5K0
​时间序列&日期学习笔记大全(上)
对于时间序列数据,传统的做法是在一个序列或DataFrame的索引中表示时间成分,这样就可以对时间元素执行操作。pandas也可以将时间作为数据
朱小五
2020/09/16
1.6K0
​时间序列&日期学习笔记大全(上)
Pandas中级教程——时间序列数据处理
Pandas 是数据分析领域中最为流行的库之一,它提供了丰富的功能用于处理时间序列数据。在实际项目中,对时间序列数据的处理涉及到各种操作,包括日期解析、重采样、滑动窗口等。本篇博客将深入介绍 Pandas 中对时间序列数据的处理技术,通过实例演示如何灵活应用这些功能。
Echo_Wish
2023/12/22
3730
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学、经济学、生态学、神经科学、物理学等。在多个时间点观察或测量到的任何事物都可以形成一段时间序列。很多时间序列是固定频率的,也就是说,数据点是根据某种规律定期出现的(比如每15秒、每5分钟、每月出现一次)。时间序列也可以是不定期的,没有固定的时间单位或单位之间的偏移量。时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(timestamp),特定的时刻。 固定时期(period),如2007年1月或201
SeanCheney
2018/04/24
6.7K0
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
Pandas处理时序数据(初学者必会)!
时序数据是指时间序列数据。时间序列数据是同一统一指标按时间顺序记录的数据列。在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。
Datawhale
2020/07/15
3.3K0
Pandas处理时序数据(初学者必会)!
时间序列建模的时间戳与时序特征衍生思路
时间序列模型在我们日常工作中应用的场景还是会很多的,比如我们去预测未来的销售单量、预测股票价格、预测期货走势、预测酒店入住等等,这也是我们必须要掌握时序建模的原因。而关于时间戳以及时序值的特征衍生,在建模过程中起到的作用是十分巨大的!之前写过一篇关于日期特征操作的文章——《关于日期特征,你想知道操作都在这儿~》,可以先回顾下,里面有关于日期特征的基础操作手法。
Sam Gor
2022/02/25
1.7K0
时间序列建模的时间戳与时序特征衍生思路
Python数据分析之Pandas(三)
: | -----: | ------: | -----: | --------: | | 0 | 1 | 1193 | 5 | 978300760 | | 1 | 1 | 661 | 3 | 978302109 | | 2 | 1 | 914 | 3 | 978301968 | | 3 | 1 | 3408 | 4 | 978300275 | | 4 | 1 | 2355 | 5 | 978824291 |
yuanshuai
2022/08/22
1.5K0
Python数据分析之Pandas(三)
7个常用的Pandas时间戳处理函数
Pandas 库中有四个与时间相关的概念 日期时间:日期时间表示特定日期和时间及其各自的时区。它在 pandas 中的数据类型是 datetime64[ns] 或 datetime64[ns, tz]。 时间增量:时间增量表示时间差异,它们可以是不同的单位。示例:"天、小时、减号"等。换句话说,它们是日期时间的子类。 时间跨度:时间跨度被称为固定周期内的相关频率。时间跨度的数据类型是 period[freq]。 日期偏移:日期偏移有助于从当前日期计算选定日期,日期偏移量在 pandas 中没有特定的数据类
数据STUDIO
2022/05/24
1.5K0
Pandas处理时间序列数据的20个关键知识点
时间序列数据有许多定义,它们以不同的方式表示相同的含义。一个简单的定义是时间序列数据包括附加到顺序时间点的数据点。
deephub
2020/09/23
2.8K0
Pandas处理时间序列数据的20个关键知识点
用pandas处理时间格式数据
我们在处理时间相关的数据时有很多库可以用,最常用的还是内置的datetime、time这两个。做数据分析时基本都会导入pandas库,而pandas提供了Timestamp和Timedelta两个也很强大的类,并且在其官方文档[1]上直接写着对标datetime.datetime,所以就打算深入一下pandas内置的Timestamp的用法,在不导入datetime等库的时候实现对时间相关数据的处理。
蛰虫始航
2019/09/29
4.5K0
用pandas处理时间格式数据
Python 数据分析(PYDA)第三版(五)
对数据集进行分类并对每个组应用函数,无论是聚合还是转换,都可能是数据分析工作流程的关键组成部分。加载、合并和准备数据集后,您可能需要计算组统计信息或可能需要为报告或可视化目的计算数据透视表。pandas 提供了一个多功能的groupby接口,使您能够以自然的方式切片、切块和总结数据集。
ApacheCN_飞龙
2024/05/24
3010
Python 数据分析(PYDA)第三版(五)
Pandas学习笔记之时间序列总结
早起导读:pandas是Python数据处理的利器,时间序列数据又是在很多场景中出现,本文来自GitHub,详细讲解了Python和Pandas中的时间及时间序列数据的处理方法与实战,建议收藏阅读。
刘早起
2020/09/15
4.2K0
Pandas 2.2 中文官方教程和指南(二十一·二)
有时,我们需要调整箱子的开始而不是结束,以便使用给定的freq进行向后重新采样。向后重新采样默认将closed设置为'right',因为最后一个值应被视为最后一个箱子的边缘点。
ApacheCN_飞龙
2024/05/24
5850
Pandas DateTime 超强总结
对于 Pandas 来说,可以处理众多的数据类型,其中最有趣和最重要的数据类型之一就是时间序列数据。时间序列数据无处不在,它在各个行业都有很多应用。患者健康指标、股票价格变化、天气记录、经济指标、服务器、网络、传感器和应用程序性能监控都是时间序列数据的应用方向
周萝卜
2022/05/22
5.7K0
Pandas DateTime 超强总结
数据导入与预处理-拓展-pandas时间数据处理01
数据导入与预处理-拓展-pandas时间数据处理01 数据导入与预处理-拓展-pandas时间数据处理02 数据导入与预处理-拓展-pandas时间数据处理03
用户2225445
2022/11/12
6.7K0
数据导入与预处理-拓展-pandas时间数据处理01
数据导入与预处理-拓展-pandas时间数据处理02
数据导入与预处理-拓展-pandas时间数据处理01 数据导入与预处理-拓展-pandas时间数据处理02 数据导入与预处理-拓展-pandas时间数据处理03 备注:如果有帮助,欢迎点赞收藏评论一键三联哈~~
用户2225445
2022/11/12
2K0
数据导入与预处理-拓展-pandas时间数据处理02
Pandas 2.2 中文官方教程和指南(二十一·一)
pandas 包含一组紧凑的 API,用于执行窗口操作 - 一种在值的滑动分区上执行聚合的操作。该 API 的功能类似于groupby API,Series和DataFrame调用具有必要参数的窗口方法,然后随后调用聚合函数。
ApacheCN_飞龙
2024/05/24
4400
软件测试|数据处理神器pandas教程(八)
前面的文章中,我们讲解了pandas处理时间的功能,本篇文章我们来介绍pandas时间序列的处理。
霍格沃兹测试开发Muller老师
2023/04/10
1.3K0
Pandas处理时间序列数据-入门
在pandas中,时间戳(Timestamp,通常指的是自1970年1月1日(UTC)以来的秒数)是用于表示特定时间点的数据类型。它是pandas库中用于时间序列分析的一个重要组成部分,基于Python的datetime模块但提供了更丰富的功能。时间戳不仅包含日期(年、月、日),还包含时间(时、分、秒,以及可选的毫秒、微秒和纳秒)。
皮大大
2024/09/05
3100
Python入门操作-时间序列分析
时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。本文我们会分享如何用历史股票数据进行基本的时间序列分析(以下简称时序分析)。首先我们会创建一个静态预测模型,检测模型的效度,然后分享一些用于时序分析的重要工具。
一墨编程学习
2018/12/06
1.6K0
Python入门操作-时间序列分析
推荐阅读
相关推荐
Python中的时间序列数据操作总结
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验