前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货分享 | Pandas处理时间序列的数据

干货分享 | Pandas处理时间序列的数据

作者头像
用户6888863
发布2021-07-19 14:17:39
1.6K0
发布2021-07-19 14:17:39
举报
文章被收录于专栏:AI篮球与生活AI篮球与生活

在进行金融数据的分析以及量化研究时,总是避免不了和时间序列的数据打交道,常见的时间序列的数据有比方说一天内随着时间变化的温度序列,又或者是交易时间内不断波动的股票价格序列,今天小编就为大家来介绍一下如何用“Pandas”模块来处理时间序列的数据

01

创建一个时间戳

首先我们需要导入我们所需要用到的模块,并且随机创建一个时间戳,有两种方式来创建,如下所示

代码语言:javascript
复制
import pandas as pd
import numpy as np
from datetime import datetime

pd.to_datetime('2021-05-20')  ##output: Timestamp('2021-05-20 00:00:00')
pd.Timestamp('2021-05-20')  ##output: Timestamp('2021-05-20 00:00:00')

02

访问时间信息

我们可以来查看一下这个时间戳所代表的年、月、日等信息

代码语言:javascript
复制
a = pd.Timestamp('2021-10-01')
a.day_name()    ## Friday,看来今年的10月1日是周五哈?
a.month_name()  ## October 十月份
a.day(), a.month(), a.year()  ## 1, 10, 2021,查看年月日等信息

03

数据格式转化为时间序列

接下来我们做一些数据处理,例如将数据集中的“time_frame”转化为时间序列的格式

代码语言:javascript
复制
df = pd.DataFrame({"time_frame": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05"]})
df['time_frame'] = pd.to_datetime(df['time_frame'])

04

字符串转化成时间格式

要是我们想将里面的时间序列的数据变成字符串时,可以这么来操作

代码语言:javascript
复制
date_string = [str(x) for x in df['time_frame'].tolist()]

当然从字符串转换回去时间序列的数据,在“Pandas”中也有相应的方法可以来操作,例如

代码语言:javascript
复制
time_string = ['2021-02-14 00:00:00', '2021-02-14 01:00:00', '2021-02-14 02:00:00', '2021-02-14 03:00:00', '2021-02-14 04:00:00', '2021-02-14 05:00:00', '2021-02-14 06:00:00']
pd.to_datetime(time_string, infer_datetime_format = True)

当然我们还有其他的方式来实现将字符串转换成时间格式,例如

代码语言:javascript
复制
import datetime
text_1 = "2021-02-14"
datetime.datetime.strptime(text_1, '%Y-%m-%d')

05

提取时间格式背后的信息

在时间序列的数据处理过程当中,我们可能需要经常来实现下面的需求

l求某个日期对应的星期数(2021-06-22是第几周)

l判断一个日期是周几(2021-02-14是周几)

l判断某一日期是第几季度,等等

当数据集中的某一列已经转化为是“datetime64”的格式时,仅需要用到“dt”的方法,就可以快速得到相应的结果,例如

代码语言:javascript
复制
df = pd.DataFrame({"time_frame": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06", "2021-01-07", "2021-01-08"]})
df["time_frame"] = pd.to_datetime(df["time_frame"])
# 一周中的第几天
df.time_frame.dt.dayofweek[0]
# 返回对应额日期
df.time_frame.dt.date[0]
# 返回一周中的第几天,0对应周一,1对应周二
 df.time_frame.dt.weekday[0]

除此之外,下表列出了几个并不常见的方法和属性

06

关于date_range函数

可用于创建时间索引,并且时间频率可以灵活调整,参数“freq”就是用来调整时间频率的,“M”代表月份,“D”就代表的是天数了

代码语言:javascript
复制
pd.date_range(start='2021-02-14', periods=10, freq='M')

07

period_range和timedelta_range函数

和上面的“date_range”函数类似,用于创建时间索引

代码语言:javascript
复制
pd.period_range('2021', periods=10, freq='M')
代码语言:javascript
复制
pd.timedelta_range(start='0', periods=24, freq='H')

08

关于重采样resample

我们也可以对时间序列的数据集进行重采样,重采样就是将时间序列从一个频率转换到另一个频率的处理过程,主要分为降采样和升采样将高频率、间隔短的数据聚合到低频率、间隔长的过程称为是降采样,反之则是升采样.

我们先来创建一个包含30个值和一个时间序列索引的数据集

代码语言:javascript
复制
A = pd.date_range('2021-01-01', periods=30, freq='D')
values = np.random.randint(10, size=30)
S = pd.Series(values, index=A)

返回5天时间内的数据加总

代码语言:javascript
复制
S.resample('5D').sum()

09

关于滑动窗口“rolling”和“expanding”

因此便就有了滑动窗口这一个概念,简而言之就是将某个时点的数据衍生到包含这个时点的一段时间内做一个数据统计。首先我们先来创建需要用到的数据集

代码语言:javascript
复制
index = pd.date_range('2021-01-01',periods=30) 
data = pd.DataFrame(np.arange(len(index)),index=index,columns=['test'])

主要有“rolling”方法和“expanding”方法,“rolling”方法考虑的是一定的时间段内的数据,而“expanding”考虑的则是之前所有的数据,例如

代码语言:javascript
复制
# 移动3个值,进行求和
data['sum'] = data.test.rolling(3).sum()
# 移动3个值,进行求平均数
data['mean'] = data.test.rolling(3).mean()

我们发现数据集中有一些缺失值,我们这里就可以使用“pandas”中特有的方法来进行填充,例如

代码语言:javascript
复制
data['mean'].fillna(method = 'backfill')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 关于数据分析与可视化 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档