Может кто-нибудь объяснить разницу между методами asfreq и resample в pandas? Когда нужно использовать что?
Разница между asfreq и resample
Ответ 1
resample
более общий, чем asfreq
. Например, используя resample
, я могу передать произвольную функцию для выполнения binning над объектом Series
или DataFrame
в ящиках произвольного размера. asfreq
- это сжатый способ изменения частоты объекта DatetimeIndex
. Он также обеспечивает функциональность дополнений.
Как говорится в документации pandas, asfreq
- это тонкая оболочка вокруг вызова date_range
+ вызова reindex
. См. здесь для примера.
Примером resample
, который я использую в своей повседневной работе, является вычисление числа спайков нейрона в 1-секундных бункерах путем передискретизации большого булевого массива, где True
означает "всплеск" и False
означает "нет" Спайк". Я могу сделать это так же просто, как large_bool.resample('S', how='sum')
. Вид аккуратный!
asfreq
может использоваться, если вы хотите изменить DatetimeIndex
на другую частоту, сохраняя при этом те же значения в текущем индексе.
Здесь пример, где они эквивалентны:
In [6]: dr = date_range('1/1/2010', periods=3, freq=3 * datetools.bday)
In [7]: raw = randn(3)
In [8]: ts = Series(raw, index=dr)
In [9]: ts
Out[9]:
2010-01-01 -1.948
2010-01-06 0.112
2010-01-11 -0.117
Freq: 3B, dtype: float64
In [10]: ts.asfreq(datetools.BDay())
Out[10]:
2010-01-01 -1.948
2010-01-04 NaN
2010-01-05 NaN
2010-01-06 0.112
2010-01-07 NaN
2010-01-08 NaN
2010-01-11 -0.117
Freq: B, dtype: float64
In [11]: ts.resample(datetools.BDay())
Out[11]:
2010-01-01 -1.948
2010-01-04 NaN
2010-01-05 NaN
2010-01-06 0.112
2010-01-07 NaN
2010-01-08 NaN
2010-01-11 -0.117
Freq: B, dtype: float64
Что касается того, когда использовать либо: это зависит от проблемы, которую вы имеете в виду... заботиться о том, чтобы поделиться?