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对数据进行重采样,并将结果按年进行聚合。
本文链接:https://my.lmcjl.com/post/19914.html
展开阅读全文
4 评论