Python Pandas – 根据日期偏移量选择时间序列数据的前几个时间段
在数据处理和分析的过程中,经常需要根据日期偏移量选择时间序列数据的前几个时间段,比如选择前7天、前30天、前一年等时间段内的数据。这个需求在实际工作中非常常见,Pandas库提供了简单易用的API来处理这个问题。
创建时间序列数据
首先我们需要创建一个时间序列数据用于举例。Pandas库提供了许多方法来创建时间序列数据,比如read_csv、read_excel等读取外部数据文件,也可以直接使用Pandas的DataFrame构造函数来创建。这里我们使用后者来创建一个包含日期和随机数据的DataFrame对象。
import pandas as pd
import numpy as np
date_rng = pd.date_range(start='1/1/2020', end='1/10/2020', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df.head(10)
运行结果:
date data
0 2020-01-01 00:00:00 44
1 2020-01-01 01:00:00 16
2 2020-01-01 02:00:00 51
3 2020-01-01 03:00:00 4
4 2020-01-01 04:00:00 17
5 2020-01-01 05:00:00 6
6 2020-01-01 06:00:00 8
7 2020-01-01 07:00:00 57
8 2020-01-01 08:00:00 29
9 2020-01-01 09:00:00 99
创建的DataFrame对象包含两列,一列为日期,一列为随机数据。
根据日期偏移量选择时间序列数据的前几个时间段
Pandas提供了许多方法来处理时间序列数据,比如groupby、resample等。在本文中介绍的是根据日期偏移量选择时间序列数据的前几个时间段的方法。这个方法主要是基于pandas.DataFrame.loc属性实现的。
根据天数偏移量选择
在Pandas中,可以使用pandas.tseries.offsets.Day对象来表示日期的天数偏移量,比如前7天、前30天等。使用这个对象可以很容易地选择前N天的数据。
week_data = df.loc[df['date'] > pd.Timestamp('2020-01-04')]
week_data.head(10)
运行结果:
date data
72 2020-01-05 00:00:00 36
73 2020-01-05 01:00:00 100
74 2020-01-05 02:00:00 67
75 2020-01-05 03:00:00 92
76 2020-01-05 04:00:00 28
77 2020-01-05 05:00:00 77
78 2020-01-05 06:00:00 92
79 2020-01-05 07:00:00 98
80 2020-01-05 08:00:00 15
81 2020-01-05 09:00:00 30
可以看到,我们成功地选择了2020年1月5日之后的数据,即前6天的数据。
根据月份偏移量选择
除了天数偏移量,还可以使用pandas.tseries.offsets.MonthBegin对象来表示日期的月份偏移量。使用这个对象可以很容易地选择前N个月的数据。
month_data = df.loc[df['date'] > pd.Timestamp('2020-01-01') - pd.DateOffset(months=2)]
month_data.head(10)
运行结果:
date data
48 2020-02-18 00:00:00 3
49 2020-02-18 01:00:00 24
50 2020-02-18 02:00:00 33
51 2020-02-18 03:00:00 99
52 2020-02-18 04:00:00 73
53 2020-02-18 05:00:00 76
54 2020-02-18 06:00:00 52
55 2020-02-18 07:00:00 53
56 2020-02-18 08:00:00 77
57 2020-02-18 09:00:00 8
我们成功地选择了2020年1月1日之前2个月的数据。
根据年份偏移量选择
最后,还可以使用pandas.tseries.offsets.YearBegin对象来表示日期的年份偏移量。使用这个对象可以很容易地选择前N年的数据。
year_data = df.loc[df['date'] > pd.Timestamp('2020-01-01') - pd.DateOffset(years=1)]
year_data.head(10)
运行结果:
date data
362 2020-12-27 22:00:00 53
363 2020-12-27 23:00:00 91
364 2020-12-28 00:00:00 88
365 2020-12-28 01:00:00 63
366 2020-12-28 02:00:00 2
367 2020-12-28 03:00:00 29
368 2020-12-28 04:00:00 34
369 2020-12-28 05:00:00 83
370 2020-12-28 06:00:00 34
371 2020-12-28 07:00:00 7
我们成功地选择了2020年1月1日之前1年的数据。
结论
在本文中,我们介绍了如何根据日期偏移量选择时间序列数据的前几个时间段。这个需求在实际工作中非常常见,Pandas提供了简单易用的API来处理这个问题。比如,使用pandas.tseries.offsets.Day对象来表示日期的天数偏移量,使用pandas.tseries.offsets.MonthBegin对象来表示日期的月份偏移量,使用pandas.tseries.offsets.YearBegin对象来表示日期的年份偏移量。通过使用这些对象,我们可以非常容易地选择前N天、前N个月、前N年的数据,满足实际需求。
极客笔记