Python 中的resample 的详细用法
时间: 2024-03-21 18:39:55 浏览: 109
在 Pandas 中,`resample` 方法是对时间序列数据进行重采样的函数,可以实现从高频率数据转换到低频率数据的聚合操作。下面是 `resample` 方法的详细用法:
1. 语法:
```python
DataFrame.resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None)
```
其中,`rule` 是重采样的规则,可以是字符串或时间偏移量对象。其他参数的含义如下:
- `axis`:指定重采样的轴,默认为 0;
- `closed`:指定区间闭合方式,可选值为 'left'(左闭右开)、'right'(左开右闭)、'both'(两端都闭)和 'neither'(两端都开),默认为 'right';
- `label`:指定聚合后的区间标签,可选值为 'left'(以左端点标签为标准)和 'right'(以右端点标签为标准),默认为 'right';
- `convention`:指定聚合后区间的标签方式,可选值为 'start'(以区间起始时间为标准)和 'end'(以区间结束时间为标准),默认为 'start';
- `kind`:指定聚合方式,可选值为 'timestamp'(时间戳聚合)和 'period'(周期聚合),默认为 None;
- `loffset`:指定输出时间索引的偏移量;
- `base`:指定周期聚合的基准点,默认为 0;
- `on`:指定时间序列数据的列名,如果数据不是时间序列,则不需要设置;
- `level`:指定时间序列数据的层级索引。
2. 重采样方法
在 `resample` 方法中,可以使用以下方法对时间序列数据进行聚合操作:
- `asfreq`:返回重采样后的时间序列的最后一个值;
- `bfill`:用下一个值来填充缺失值;
- `ffill`:用前一个值来填充缺失值;
- `mean`:求平均值;
- `sum`:求和;
- `max`:求最大值;
- `min`:求最小值;
- `median`:求中位数;
- `ohlc`:对开盘价、最高价、最低价和收盘价进行聚合。
3. 示例
下面是一个简单的示例,演示如何使用 `resample` 方法对时间序列数据进行重采样和聚合:
```python
import pandas as pd
import numpy as np
# 创建时间序列数据
date_rng = pd.date_range(start='1/1/2021', end='1/10/2021', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df = df.set_index('date')
# 以天为单位对数据进行重采样
df_resampled = df.resample('D').mean()
# 输出重采样后的数据
print(df_resampled)
```
输出结果为:
```
data
date
2021-01-01 54.166667
2021-01-02 50.458333
2021-01-03 46.125000
2021-01-04 54.083333
2021-01-05 49.208333
2021-01-06 48.166667
2021-01-07 49.500000
2021-01-08 47.666667
2021-01-09 50.791667
2021-01-10 56.000000
```
可以看到,原始数据的时间间隔为 1 小时,重采样后的数据的时间间隔为 1 天,并且每一天的数据是原始数据在这一天内的平均值。
阅读全文