假设我们有一个每月的时间序列,可能缺少月份,并且在将数据加载到带有 DatetimeIndex 的 pandas Series 对象时,我们希望确保每个日期观察都标记为月末日期。但是,原始输入日期可能会落在该月的任何地方,因此我们需要强制它们进行月末观察。
我的第一个想法是做这样的事情:
import pandas as pd
pd.DatetimeIndex([datetime(2012,1,20), datetime(2012,7,31)], freq='M')
但是,这只是将日期保留为 [2012-01-20,2012-07-31],并且不会强制它们为月末值 [2012-01-31,2012-07-31]。
我的第二次尝试是:
ix = pd.DatetimeIndex([datetime(2012,1,20), datetime(2012,7,31)], freq='M')
s = pd.Series(np.random.randn(len(ix)), index=ix)
s.asfreq('M')
但这给出了:
2012-01-31 NaN
2012-02-29 NaN
2012-03-31 NaN
2012-04-30 NaN
2012-05-31 NaN
2012-06-30 NaN
2012-07-31 0.79173
Freq: M
在引擎盖下,该asfreq
函数正在调用date_range
DatetimeIndex。
如果我使用PeriodIndex
而不是,这个问题很容易解决DatetimeIndex
;但是,我需要支持一些当前不支持的频率,PeriodIndex
据我所知,没有办法用我自己的Period
频率扩展 pandas。