Pandas DataFrame 日期索引的偏移日期

Posted

技术标签:

【中文标题】Pandas DataFrame 日期索引的偏移日期【英文标题】:Offset date for a Pandas DataFrame date index 【发布时间】:2013-11-18 04:10:36 【问题描述】:

给定一个如下创建的 Pandas 数据框:

dates = pd.date_range('20130101',periods=6)
df = pd.DataFrame(np.random.randn(6),index=dates,columns=list('A'))

                  A
2013-01-01   0.847528
2013-01-02   0.204139
2013-01-03   0.888526
2013-01-04   0.769775
2013-01-05   0.175165
2013-01-06  -1.564826

我想将 15 天添加到索引中。 这不起作用>

#from pandas.tseries.offsets import *
df.index+relativedelta(days=15)
#df.index + DateOffset(days=5)

TypeError: relativedelta(days=+15)

我似乎无法正确处理索引......

【问题讨论】:

【参考方案1】:

你可以使用DateOffset:

>>> df = pd.DataFrame(np.random.randn(6),index=dates,columns=list('A'))
>>> df.index = df.index + pd.DateOffset(days=15)
>>> df
                   A
2013-01-16  0.015282
2013-01-17  1.214255
2013-01-18  1.023534
2013-01-19  1.355001
2013-01-20  1.289749
2013-01-21  1.484291

【讨论】:

非常感谢!看来我没有意识到需要在 DateOffset 之前加上 pd。 我正在寻找相同问题的解决方案,并且效果很好。谢谢! @dartdog 是否必须使用前缀 pd. 取决于您导入功能的方式。如果你写了from pandas import DateOffset,那么你可以(并且必须)写DateOffset。如果你是import pandas,那么它就是pandas.DateOffset【参考方案2】:

略短/更直接的是tshift

df = df.tshift(15, freq='D')

Link to a list of freq aliases

【讨论】:

上面的链接好像坏了,也许链接到这个? pandas.pydata.org/pandas-docs/stable/… 谢谢@fixxxer,这是一个略有不同的链接,但我已经更新了链接。 更新链接:pandas.pydata.org/pandas-docs/stable/user_guide/…【参考方案3】:

如果需要将其转换为DatetimeIndex 并添加使用天数:

df.index = pd.to_datetime(df.index) + pd.Timedelta('15 days')

如果已经DatetimeIndex:

df.index += pd.Timedelta('15 days')

【讨论】:

以上是关于Pandas DataFrame 日期索引的偏移日期的主要内容,如果未能解决你的问题,请参考以下文章

熊猫滚动窗口和日期时间索引:“偏移”是啥意思?

pandas使用datetime创建示例dataframe:包含完整的时分秒信息创建时间索引使用不同的时间频率date_range中参数freq的偏移量别名

Pandas:在两个日期之间选择 DataFrame 行(日期时间索引)

Pandas Dataframe .loc + 更新非唯一日期时间索引?

遍历 Pandas Dataframe 中定义的日期时间索引范围

pandas使用query函数查询指定日期索引对应的dataframe数据行(select rows using a single date in dataframe)