Pandas之时间序列

文章目录

    • 1. Python自带的日期与时间工具
    • 2. Pandas中的时间序列工具
      • 频率代码
      • 重新取样
      • 时间迁移

1. Python自带的日期与时间工具

原生Python的日期和时间工具:datetime和dateutil
例:

from datetime import datetime
date = datetime(year=2019, month=9, day=1)
# date的type为datetime.datetime

# dateutil可以解析字符串格式的日期
from dateutil import parser
date = parser.parse("4th of July, 2019")

Python自带的datetime和dateutil属轻量级的,简单易用,但如果处理的时间数据量很大的时候,那么速度就会比较慢。

2. Pandas中的时间序列工具

Pandas所有关于日期和时间的处理方法全部都是通过Timestamp对象实现的基于numpy的特性使得其性能更高效。

import pandas as pd
date = pd.to_datetime("20190101")
#print(date)为Timestamp('2019-09-01 00:00:00')

dates=pd.to_datetime(["20190101","20190102","20190103","20190104"])
# dates是DatetimeIndex类型

# 任何DatetimeIndex类型都可以通过to_period()方法和一个频率代码转换成Periodindex类型。
dates.to_period('D')

# 当一个日期减去另一个日期,返回的结果是TimedeltaIndex类型
dates - dates[0]

最基础的日期/时间对象是Timestamp和DatetimeIndex,这两种对象可以直接使用,最常用的是方法是使用pd.to_datetime(),传入一个日期时返回一个Timestamp类型,传递一个时间序列返回一个DatetimeIndex类型。

为了能更便捷地创建有规律的时间序列,Pandas提供了一些方法:

  • pd.date_range() 处理时间戳
  • pd.period_range() 处理时间周期
  • pd.timedelta_range() 处理时间间隔
import pandas as pd
dates1 = pd.date_range('20190101', '20190120')
# dates1是一个DatetimeIndex类型

dates2 = pd.date_range('20190101',periods=10)
# periods参数是周期,默认频率为 'D'

dates3 = pd.period_range('20190201',periods=10)
# dates2是PeriodIndex类型

dates4 = pd.timedelta_range(0,periods=10,freq='H')
# dates4是TimedeltaIndex类型

频率代码

代码 描述 代码 描述 代码 描述
D B 天(仅含工作日) MS 月初
W BM 月末(仅含工作日) BMS 月初(仅含工作日)
M 月末 BQ QS
Q 季末 BA BQS
A 年末 BH (工作时间) AS
H BAS
T 分钟
S
L 毫秒
U 微秒 N 纳秒

重新取样

处理时间序列数据时,经常需要按照新的频率(更高频率或更低频率)对数据进行重新取样。可以通过df.resample()或df.asfreq().

  • df.resample() 是以数据累计为基础
  • df.asfreq() 是以数据选择为基础

重新取样时产生缺失值可以使用method参数,method={‘bifill’ | ‘ffill’}

df.asfreq('A', method=ffill)

时间迁移

另一种常用的对时间序列操作是对数据按按时间进行迁移,Pandas提供df.shift()和df.tshift()两种方法

# 将数据向前推进100天
df.shift(100)
# 将时间索引值向前推进100天
df.tshift(100)

这类迁移方法的常见使用场景就是计算数据在不同时段的差异。

BianHua = 100 * (df.tshift(-365) / df )

你可能感兴趣的:(数据分析)