python时间序列库_【Python学习笔记】时间序列

f3d3b0fe3950

随便放个镇楼图,图片源自unsplash

1. Python的日期与时间工具

Python基本的日期与时间功能都在标准库的datetime模块中,例如使用datetime类型创建一个日期,返回一个datetime对象:

from datetime import datetime

#创建日期2019年8月5日

dt1 = datetime(2019,8,5)

返回当前时刻及其年、月、日、周等:

>>>from datetime import datetime

>>>datetime.now()

#2019年8月5日15时38分1秒

datetime.datetime(2019, 8, 5, 15, 38, 1, 345990)

>>>datetime.now().year

2019

>>>datetime.now().month

8

>>>datetime.now().day

14

>>>datetime.now().weekday()+1

#周一

1

>>>datetime.now().isocalendar()

#2019年第32周的第1天

(2019,32,1)

>>>datetime.now().isocalendar()[1]

#返回周数

32

设置指定的日期、时间格式:

>>>from datetime import datetime

>>>datetime.now().date()

datetime.date(2019, 8, 5) #只显示日期

>>>datetime.now().time()

datetime.date(2019, 8, 5) #只显示时间

#使用strftime()函数可自定义时间和日期的格式

>>>datetime.now().strftime('%Y%m%d')

'20190805'

时间计算:

datetime2 = datetime1 + timedelta

datetime2 = datetime1 - timedelta

timedelta = datetime1 - datetime2

datetime1 < datetime2

datetime模块在易用性和灵活性方面表现良好,但如果需要处理的时间数据量比较大时,datetime的速度就会比较慢。

2. Pandas的日期与时间工具

Pandas所有关于日期与时间的处理方法全部都是通过Timestamp对象实现的,通过一组Timestamp对象就可以创建一个作为Series或DateFrame索引的DatetimeIndex。

import pandas as pd

dt2 = pd.to_datetime('21090805')

print(dt2)

#Timestamp('2109-08-05 00:00:00')

print(dt2.date())

#datetime.date(2109, 8, 5)

在Pandas中,用来处理时间序列的基本数据类型有三种:

Timestamp类型,针对处理时间戳数据,对应的索引数据结构是DatetimeIndex,创建规律性时间序列的方法为:pd.date_range()。

PeriodIndex类型,针对处理时间周期数据,对应的索引数据结构是PeriodIndex,创建规律性时间序列的方法为:pd.period_range()。

Timedelta类型,针对处理时间增量或持续时间,对应的索引数据结构是TimedeltaIndex,创建规律性时间序列的方法为:pd.timedelta_range()。

在pd.xxx_range()中,参数period用于设置周期数,freq用于设置时间间隔。

用时间作为索引

可以用DatetimeIndex()生成时间索引,例:

indx = pd.DatetimeIndex(['201908','201909','201910','201911'])

df = pd.DataFrame(.......,index=indx)

或者使用pd.xxx_range()生成一个有规律的时间序列,例:

import pandas as pd

import numpy as np

dtindx = pd.date_range('20190805',periods=17,freq='H')

dfdt = pd.DataFrame(np.random.randint(10,100,(17,3)),index=dtindx,columns=list('abc'))

print(dfdt)

# a b c

# 2019-08-05 00:00:00 19 35 66

# 2019-08-05 01:00:00 94 94 69

# 2019-08-05 02:00:00 92 77 83

# 2019-08-05 03:00:00 61 50 46

# 2019-08-05 04:00:00 48 14 11

# 2019-08-05 05:00:00 96 94 53

# 2019-08-05 06:00:00 64 56 39

# 2019-08-05 07:00:00 60 26 72

# 2019-08-05 08:00:00 33 59 84

# 2019-08-05 09:00:00 49 51 99

# 2019-08-05 10:00:00 90 22 93

# 2019-08-05 11:00:00 68 95 27

# 2019-08-05 12:00:00 91 17 26

# 2019-08-05 13:00:00 79 49 87

# 2019-08-05 14:00:00 31 81 18

# 2019-08-05 15:00:00 69 88 33

# 2019-08-05 16:00:00 83 97 44

时间频率与频率转换

时间频率指的是时间周期,即periods参数,pandas的频率代码如下:

代码

描述

代码

描述

D

B

天(仅含工作日)

W

M

月末

BM

月末(仅含工作日)

Q

季末

BQ

季末(仅含工作日)

A

年末

BA

年末(仅含工作日)

H

小时

BH

小时(工作时间)

T

分钟

S

L

毫秒

U

微妙

N

纳秒

带开始索引的频率代码:

代码

频率

MS

月初

BMS

月初(仅含工作日)

QS

季初

BQS

季初(仅含工作日)

AS

年初

BAS

年初(仅含工作日)

使用 .asfreq() 进行频率转换。或者使用 resample() 。

一般情况下,resample比asfreq更常用,两者主要差异为resample()是以数据累计为基础,而asfreq()是以数据选择为基础。

频率转换对缺失值的默认处理为向前取样,也就是在里面填充NaN,填缺参数有两种:

bfill,向后取样

ffill,向前取样

时间迁移

时间迁移常用在计算数据在不同时段的差异,Pandas有两种此类方法:

shift(),迁移数据;

tshift(),迁移索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值