关键词

详解Pandas数据重采样(resample)的3种使用方法

Pandas中的resample方法用于对时间序列数据进行重采样,可以将数据从一个时间频率转换为另一个时间频率,比如将日频率的数据转换为月频率的数据。

resample的语法格式如下:

DataFrame.resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None, origin='start', offset=None)
参数说明:

  • rule:重采样的规则,例如"5min"表示5分钟,"D"表示天。具体规则可以参考Pandas官方文档。
  • how:对采样到的数据执行聚合操作的函数名或函数对象。例如"sum"、"mean"、"median"等。默认为None,表示不进行聚合操作。
  • axis:指定重采样的轴,0表示行轴,1表示列轴。默认为0。
  • fill_method:填充缺失值的方法,例如"ffill"、"bfill"等。默认为None,表示不填充缺失值。
  • closed:在重采样过程中,区间闭合的位置,例如"left"、"right"等。默认为None,表示使用默认值。
  • label:在重采样过程中,区间闭合位置的标签,例如"left"、"right"等。默认为None,表示使用默认值。
  • convention:在重采样过程中,指定重采样区间的位置是左边界还是右边界。默认为"start",表示使用左边界。
  • kind:在重采样过程中,指定返回的对象类型,例如"period"、"timestamp"等。默认为None,表示使用默认类型。
  • loffset:在重采样过程中,为重采样的时间序列添加偏移量。
  • limit:在重采样过程中,限制填充缺失值的连续次数。
  • base:在重采样过程中,指定重采样区间的基准点。
  • on:指定使用哪一列进行重采样。只有在DataFrame对象中使用才有用。
  • level:在MultiIndex对象中,指定要重采样的级别。

其中,最重要的参数是rule,表示重采样的规则,可以是一个字符串或pandas.tseries.offsets.DateOffset对象。同时,也可以使用其他参数进行更细致的控制。

下面通过几个例子来介绍resample的使用方法。

降采样:resample 将日频率数据转换为月频率数据

import pandas as pd
import numpy as np

# 创建一组日频率数据
date_rng = pd.date_range(start='1/1/2022', end='1/10/2022', freq='D')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df = df.set_index('date')

# 将日频率数据转换为月频率数据
df.resample('M').mean()

上述代码中,通过pd.date_range方法生成了一组从2022年1月1日到2022年1月10日的日频率数据,然后将这组数据转换为月频率数据,并求出每个月的平均值。

升采样:resample 将秒频率数据转换为分钟频率数据

import pandas as pd
import numpy as np

# 创建一组秒频率数据
date_rng = pd.date_range(start='1/1/2022', end='1/10/2022', freq='S')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df = df.set_index('date')

# 将秒频率数据转换为分钟频率数据
df.resample('1Min').sum()

上述代码中,通过pd.date_range方法生成了一组从2022年1月1日到2022年1月10日的秒频率数据,然后将这组数据转换为分钟频率数据,并求出每分钟的总和。

聚合采样:使用自定义函数进行重采样

import pandas as pd
import numpy as np

# 创建一组月频率数据
date_rng = pd.date_range(start='1/1/2022', end='1/10/2022', freq='M')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df = df.set_index('date')

# 定义一个自定义函数
def custom_resampler(array_like):
    return np.sum(array_like) + 5

# 使用自定义函数进行重采样
df.resample('A').apply(custom_resampler)

上述代码中,通过pd.date_range方法生成了一组从2022年1月1日到2022年1月10日的月频率数据,然后使用自定义函数custom_resampler对数据进行重采样,并将结果按年进行聚合。

本文链接:http://task.lmcjl.com/news/4455.html

展开阅读全文