首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DatetimeIndex偏移

DatetimeIndex偏移
EN

Stack Overflow用户
提问于 2014-04-28 11:33:55
回答 1查看 5.8K关注 0票数 1

我有一个由以下代码生成的dataframe:

代码语言:javascript
复制
time_index = pd.date_range(start=datetime(2013, 1, 1, 3),
                       end=datetime(2013, 1, 2, 2, 59),
                       freq='5T')
grid_columns = [u'in_brd', u'in_alt', u'out_brd', u'out_alt']  
grid_proto = pd.DataFrame(index=time_index, columns=grid_columns)

我还添加了一些数据到这个数据中。

当我试图在基本数据中的int偏移量索引中导航时,我得到了所有正确的信息:

代码语言:javascript
复制
In[152]: grid_proto.index[0] + 1
Out[152]: Timestamp('2013-01-01 03:05:00', tz=None)

但是,如果我试图使用某种切片,我会得到一个错误:

代码语言:javascript
复制
In[153]: z = grid_proto[pd.notnull(x.in_brd)]
In[154]: z.index[0] + 1
Traceback (most recent call last):

File "<ipython-input-151-3ce8a4e5e2d6>", line 1, in <module>
z.index[0] + 1

File "tslib.pyx", line 664, in pandas.tslib._Timestamp.__add__ (pandas\tslib.c:12372)

ValueError: Cannot add integral value to Timestamp without offset.

我理解这是因为在最初的情况下,我使用的是指向DatetimeIndex元素的链接,而不是标量。在第二种情况下,我得到了第一个索引元素的标量Timestamp值。我说的对吗?

如何正确处理这个偏移量?(我需要在这样的切片中导航)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-28 11:50:55

原因是,在第一种情况下,您有一个频率为5分钟的常规DatetimeIndex。因此,整数1将被解释为频率的一个单位(5分钟)。

在第二种情况下,由于切片的原因,您不再有常规的时刻表,而且DatetimeIndex不再有频率了(z.index.freq不会给出任何时间序列,而grid_proto.index.freq会给出5分钟)。

要解决这个问题,您可以简单地添加5分钟:

代码语言:javascript
复制
In [22]: import datetime as dt

In [23]: z.index[0] + dt.timedelta(minutes=5)
Out[23]: Timestamp('2013-01-01 03:05:00', tz=None)

或者您也可以添加pd.DateOffset(minutes=5) (这将给出相同的结果)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23339993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档