asfreq和resample之间的区别
能否请您解释一下asfreq和resample方法在熊猫中的区别?什么时候应该使用什么?
-
让我用一个例子来说明:
# 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]
重新采样返回a
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
您可以执行功能更强的操作
resample()
比asfreq()
。想想
resample
为groupby
+每一个方法,你可以调用后groupby
(例如,平均值,总和,应用,你的名字)。可以将其
asfreq
视为fillna()
功能有限的过滤器机制(在fillna()中,您可以指定limit
,但asfreq()不支持它)。