Pandas resample文档介绍

Pandas resample文档介绍

在本文中,我们将介绍Pandas库的resample功能,它对时间序列数据进行重采样。通过这个功能,我们可以将数据从较高的频率重采样为较低的频率,并通过应用聚合函数在时间间隔内汇总数据。这样,我们可以将一段时间内的数据归约为一个汇总值,从而更好地实现数据的可视化和分析。

阅读更多:Pandas 教程

什么是重采样?

Pandas中的resample函数可以将数据的频率从高到低转换。例如,我们有秒级别的数据,但是我们希望将其转换为分钟级别的数据,这时我们可以使用Pandas的resample函数来将一分钟的数据归约为一分钟的数据,同时进行统计汇总。

在下面的示例中,我们将使用一个包含一周工作日每小时的数据集。我们将创建一个新的DataFrame,将频率从小时级别重采样到天级别,同时将所有值求和。

import pandas as pd

# 创建一个DataFrame
df = pd.DataFrame({'date': pd.date_range('2022-02-14', periods=24*5, freq='1H'),
                   'value': range(24*5)})

# 将频率从小时级别重采样到天级别
df_day = df.resample('D', on='date').sum()

# 打印结果
print(df_day)
Python

运行结果为:

            value
date             
2022-02-14    276
2022-02-15    300
2022-02-16    324
2022-02-17    348
2022-02-18    372
Python

在这个例子中,我们使用了resample函数来重采样数据。我们将'D'作为重采样规则,表示重采样到天级别。同时,我们指定了on='date',表示我们要重采样的数据是我们DataFrame中的日期列,而不是索引。我们使用sum函数来计算每天的总和,并将结果存储在一个新的DataFrame中。

重采样规则

在Pandas的resample函数中,我们可以使用多种规则对时间序列数据进行重采样。主要规则如下:

  • A:年份的最后一个日历日。
  • M: 月份的最后一个日历日。
  • W:每周的星期一。
  • D:每个日历日。
  • H:每个小时(00:00至00:59之间的数据)。
  • T或min:每个分钟(00:00至00:01之间的数据)。
  • S:每个秒(00:00至00:00之间的数据)。
  • L或ms:每个毫秒(00:00至00:000之间的数据)。
  • U:每个微秒(00:00至00:000000之间的数据)。
  • N:每个纳秒(00:00至00:000000000之间的数据)。

下面的示例将演示如何使用这些规则:

# 创建一个DataFrame
df = pd.DataFrame({'date': pd.date_range('2022-02-14', periods=24*5, freq='1H'),
                   'value': range(24*5)})

# 将频率从小时级别重采样到每分钟级别
df_minute = df.resample('T', on='date').sum()

# 将频率从小时级别重采样到每5分钟级别
df_5minute = df.resample('5T', on='date').sum()

# 将频率从小时级别重采样到每小时级别(与原数据相同)
df_hourly = df.resample('H', on='date').sum()

# 打印结果
print('每分钟采样间隔')
print(df_minute.head())
print('每5分钟采样间隔')
print(df_5minute.head())
print('每小时采样间隔')
print(df_hourly.head())
Python

输出结果为:

每分钟采样间隔
                     value
date                      
2022-02-14 00:00:00      0
2022-02-14 00:01:00      1
2022-02-14 00:02:00      2
2022-02-14 00:03:00      3
2022-02-14 00:04:00      4
5分钟采样间隔
                     value
date                      
2022-02-14 00:00:00     10
2022-02-14 00:05:00     35
2022-02-14 00:10:00     60
2022-02-14 00:15:00     85
2022-02-14 00:20:00    110
每小时采样间隔
                     value
date                      
2022-02-14 00:00:00    276
2022-02-14 01:00:00    300
2022-02-14 02:00:00    324
2022-02-14 03:00:00    348
2022-02-14 04:00:00    372
Python

我们首先创建了一个与前面相同的DataFrame,但是这次我们使用了1小时的采样间隔。然后,我们分别使用resample函数将频率从小时级别重采样为分钟级别、5分钟级别和小时级别,并使用sum函数汇总数据。我们可以看到,不同的重采样规则导致了不同的频率。

聚合函数

在进行重采样时,我们可以使用多种聚合函数对数据进行汇总,例如summeanmaxminstdcount等。这些函数可以将时间区间内的多个数据点进行合并,产生一个单一的数据点,从而使得时间序列数据的可视化和分析更容易。

下面的示例将展示如何使用聚合函数:

# 创建一个DataFrame
df = pd.DataFrame({'date': pd.date_range('2022-02-14', periods=24*5, freq='1H'),
                   'value': range(24*5)})

# 使用聚合函数mean计算每天的平均值
df_mean = df.resample('D', on='date').mean()

# 使用聚合函数max计算每天的最大值
df_max = df.resample('D', on='date').max()

# 使用聚合函数min计算每天的最小值
df_min = df.resample('D', on='date').min()

# 打印结果
print('每天平均值')
print(df_mean)
print('每天最大值')
print(df_max)
print('每天最小值')
print(df_min)
Python

输出结果为:

每天平均值
             value
date              
2022-02-14   11.50
2022-02-15   35.50
2022-02-16   59.50
2022-02-17   83.50
2022-02-18  107.50
每天最大值
            value
date             
2022-02-14     23
2022-02-15     47
2022-02-16     71
2022-02-17     95
2022-02-18    119
每天最小值
            value
date             
2022-02-14      0
2022-02-15     24
2022-02-16     48
2022-02-17     72
2022-02-18     96
Python

在这个示例中,我们使用多个不同的聚合函数来计算每天的平均值、最大值和最小值。这些函数通过对每个时间块内的数据进行统计汇总,计算单一的汇总值。

重采样中的填充和插值

在Pandas的resample函数中,我们可以使用fillna()方法或interpolate()方法来处理重采样后的缺失值。fillna()方法可以用固定的值替换NaN值,而interpolate()方法可以使用插值法对NaN值进行计算并替换。

下面的示例将演示如何使用这些方法:

# 创建一个DataFrame,其中第二天的数据被删除了
df = pd.DataFrame({'date': pd.date_range('2022-02-14', periods=24*4, freq='1H'),
                   'value': range(24*4)}).drop(24*2, axis=0)

# 使用fillna方法将所有NaN值替换为0
df_fillna = df.resample('D', on='date').sum().fillna(0)

# 使用interpolate方法对NaN值进行插值
df_interpolate = df.resample('D', on='date').sum().interpolate()

# 打印结果
print('使用fillna方法')
print(df_fillna)
print('使用interpolate方法')
print(df_interpolate)
Python

输出结果为:

使用fillna方法
            value
date             
2022-02-14   276.0
2022-02-15     0.0
2022-02-16   324.0
2022-02-17   348.0
使用interpolate方法
                 value
date                  
2022-02-14  276.000000
2022-02-15  300.000000
2022-02-16  322.666667
2022-02-17  345.333333
Python

在这个示例中,我们首先创建了一个DataFrame,其中第二天的数据被删除了。然后,我们使用resample函数将数据从小时级别重采样到天级别,并汇总每天的数据。在fillna方法中,我们使用0来填充NaN值。在interpolate方法中,我们使用默认的线性插值来计算NaN值。可以看到,fillna方法将NaN值替换为了0,而interpolate方法使用了插值法来计算第二天的数据。

总结

Pandas的resample功能使我们能够对时间序列数据进行重采样,从而将数据从高频率转换为低频率,并通过聚合函数进行汇总。使用不同的重采样规则和聚合函数,我们可以产生不同的汇总结果。在重采样过程中,我们还可以使用fillna()方法或interpolate()方法来处理缺失值。因此,重采样是在处理时间序列数据时非常有用的工具。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册