gpt4 book ai didi

python - 强制日期符合 pandas 中给定的频率

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:55 25 4
gpt4 key购买 nike

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

最佳答案

这是一种解决方法,但无需使用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

关于python - 强制日期符合 pandas 中给定的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com