asfreq和resample之间的区别

时间:2013-08-05 14:23:48

标签: python pandas

有人可以解释一下pandas中asfreq和resample方法之间的区别吗?什么时候应该使用什么?

2 个答案:

答案 0 :(得分:35)

resampleasfreq更通用。例如,使用resample我可以传递任意函数来对任意大小的二进制位中的SeriesDataFrame对象执行分箱。 asfreq是一种更改DatetimeIndex对象频率的简明方法。它还提供填充功能。

正如pandas文档所述,asfreq是对date_range + reindex号召唤的精简包装。有关示例,请参阅here

我在日常工作中使用的resample示例是通过重新采样大型布尔数组来计算1秒区间神经元的尖峰数,其中True表示“尖峰”和{{ 1}}表示“没有尖峰”。我可以像False一样简单。有点整洁!

如果您希望将large_bool.resample('S', how='sum')更改为具有不同的频率,同时在当前索引处保留相同的值,则可以使用

asfreq

这是一个等价的例子:

DatetimeIndex

至于何时使用:它取决于你想到的问题......关心分享?

答案 1 :(得分:5)

让我用一个例子来说明:

# generate a series of 365 days
# index = 20190101, 20190102, ... 20191231
# values = [0,1,...364]
ts = pd.Series(range(365), index = pd.date_range(start='20190101', 
                                                end='20191231',
                                                freq = 'D'))
ts.head()

output:
2019-01-01    0
2019-01-02    1
2019-01-03    2
2019-01-04    3
2019-01-05    4
Freq: D, dtype: int64

现在,按季度对数据进行重新采样:

ts.asfreq(freq='Q')

output:
2019-03-31     89
2019-06-30    180
2019-09-30    272
2019-12-31    364
Freq: Q-DEC, dtype: int64

asfreq()返回一个Series对象,其中包含每个季度的最后一天。

ts.resample('Q')

output:
DatetimeIndexResampler [freq=<QuarterEnd: startingMonth=12>, axis=0, closed=right, label=right, convention=start, base=0]

重新采样返回DatetimeIndexResampler,您看不到其中的实际内容。将其视为groupby方法。它创建bins(组)的列表:

bins = ts.resample('Q')
bin.groups

output:
 {Timestamp('2019-03-31 00:00:00', freq='Q-DEC'): 90,
 Timestamp('2019-06-30 00:00:00', freq='Q-DEC'): 181,
 Timestamp('2019-09-30 00:00:00', freq='Q-DEC'): 273,
 Timestamp('2019-12-31 00:00:00', freq='Q-DEC'): 365}

到目前为止,除了返回类型外,其他都没有什么不同。让我们计算每个季度的平均值:

# (89+180+272+364)/4 = 226.25
ts.asfreq(freq='Q').mean()

output:
226.25

应用mean()时,它将输出所有值的平均值。请注意,这不是每个季度的平均值,而是每个季度最后一天的平均值。

要计算每个季度的平均值:

ts.resample('Q').mean()

output:
2019-03-31     44.5
2019-06-30    135.0
2019-09-30    226.5
2019-12-31    318.5

You can perform more powerful operations with resample()asfreq()

resample视为groupby +您可以在groupby之后调用的每种方法(例如,均值,求和,应用,命名)。

asfreq视为具有有限fillna()功能的过滤器机制(在fillna()中,您可以指定limit,但asfreq()不支持它)。