Python Pandas – 将给定的时间戳转换为以周为频率的周期

Python Pandas – 将给定的时间戳转换为以周为频率的周期

在数据分析领域,时间序列数据处理是必不可少的一环。Pandas作为Python语言中常用的数据处理库,提供了丰富的时间序列处理操作,其中就包括将时间戳转换为以周为频率的周期。

在上述转换过程中,Pandas中的resample()方法可以帮我们实现。本篇文章将围绕这个话题展开,介绍resample()方法的使用并给出实际示例。

更多Pandas相关文章,请阅读:Pandas 教程

Pandas的resample()方法

resample()方法是Pandas中常用的时间序列方法之一,它能够对时间序列进行采样、重采样操作,并支持聚合功能。该方法与groupby()方法类似,是一个分组运算,能够对时间序列进行重新取样,并按一定的时间频率进行聚合。

resample()方法的主要参数如下:

  • freq:表示重采样频率。可以是字符串,如“D”代表天,“H”代表小时,“M”代表月,也可以是时间偏移量的别名,如pd.DateOffset(weeks=1),代表每周一次。
  • how:表示重采样运算方法。如“mean”代表均值,“sum”代表和,“count”代表非缺失值的数量等。
  • closed:表示区间闭合的方式。如“right”代表右端点闭合,“left”代表左端点闭合。
  • label:表示采样点标签的位置。如“right”代表标签放在区间的右端点,“left”代表标签放在区间的左端点。
  • axis:表示重采样的轴。如“0”代表对行进行重采样操作,“1”代表对列进行重采样操作。

示例一

接下来我们就通过两个示例来具体讲解resample()方法的使用。

假设我们有如下时间序列数据:

import pandas as pd
import numpy as np

dates = pd.date_range('20220101', periods=24, freq='H')
temperature = pd.DataFrame({'temperature': np.random.randint(10, 30, size=len(dates))}, index=dates)
print(temperature)

输出结果如下:

                     temperature
2022-01-01 00:00:00           22
2022-01-01 01:00:00           23
2022-01-01 02:00:00           28
2022-01-01 03:00:00           20
2022-01-01 04:00:00           27
2022-01-01 05:00:00           26
2022-01-01 06:00:00           24
2022-01-01 07:00:00           29
2022-01-01 08:00:00           14
2022-01-01 09:00:00           20
2022-01-01 10:00:00           22
2022-01-01 11:00:00           28
2022-01-01 12:00:00           12
2022-01-01 13:00:00           15
2022-01-01 14:00:00           20
2022-01-01 15:00:00           26
2022-01-01 16:00:00           10
2022-01-01 17:00:00           25
2022-01-01 18:00:00           27
2022-01-01 19:00:00           17
2022-01-01 20:00:00           24
2022-01-01 21:00:00           23
2022-01-01 22:00:00           22
2022-01-01 23:00:00           28

我们可以使用resample()方法将以小时为单位的temperature转换为以周为单位的数据。执行如下代码:

weekly_temperature = temperature.resample('W').mean()
print(weekly_temperature)

输出结果如下:

            temperature
2022-01-02    22.000000
2022-01-09    22.875000

可以看出,在我们使用resample()方法时,将freq参数设为“W”即可将数据转换为以周为单位的时间周期,并使用mean()方法计算每周的平均温度。

示例二

接下来我们再看一个稍微复杂一些的示例,假设我们有如下时间序列数据:

import pandas as pd
import numpy as np

dates = pd.date_range('20220101', periods=100, freq='D')
data = np.random.randint(20, 50, size=len(dates))
sales = pd.DataFrame({'sales': data}, index=dates)
print(sales)

输出结果如下:

            sales
2022-01-01     28
2022-01-02     36
2022-01-03     40
2022-01-04     22
2022-01-05     45
...           ...
2022-04-06     37
2022-04-07     25
2022-04-08     20
2022-04-09     41
2022-04-10     40

[100 rows x 1 columns]

我们希望将数据转换为以周为周期,并统计每周最大销售额和平均销售额。可以通过如下代码实现:

weekly_sales = sales.resample('W').agg({'sales': ['max', 'mean']})
print(weekly_sales)

输出结果如下:

           sales          
             max       mean
2022-01-02    36  31.000000
2022-01-09    45  34.285714
2022-01-16    49  34.714286
2022-01-23    47  35.571429
2022-01-30    49  33.428571
2022-02-06    48  36.714286
2022-02-13    49  34.000000
2022-02-20    44  32.142857
2022-02-27    45  29.285714
2022-03-06    46  36.285714
2022-03-13    49  36.000000
2022-03-20    46  29.857143
2022-03-27    45  35.428571
2022-04-03    48  34.714286
2022-04-10    41  33.000000

从代码中可以看出,我们首先将销售数据resample到以周为周期,然后使用agg函数聚合数据,其中使用字典指定销售数据的最大值和平均值。

结论

通过上述两个示例,我们可以发现,resample()方法在时间序列数据处理中是非常实用的。在使用该方法时,我们可以通过指定freq参数和如mean()、max()、min()这样的方法来实现重采样的聚合方式,并得到我们想要的结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程