1

假设我们有一个每月的时间序列,可能缺少月份,并且在将数据加载到带有 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_rangeDatetimeIndex。

如果我使用PeriodIndex而不是,这个问题很容易解决DatetimeIndex;但是,我需要支持一些当前不支持的频率,PeriodIndex据我所知,没有办法用我自己的Period频率扩展 pandas。

4

1 回答 1

1

这是一种解决方法,但无需使用即可periodindex

from pandas.tseries.offsets import *

In [164]: s
Out[164]: 
2012-01-20   -1.266376
2012-07-31   -0.865573

In [165]: s.index=s.index+MonthEnd(n=0)

In [166]: s
Out[166]: 
2012-01-31   -1.266376
2012-07-31   -0.865573
于 2012-10-22T19:35:51.353 回答