【问题标题】:How to properly add hours to a pandas.tseries.index.DatetimeIndex?如何正确地将小时数添加到 pandas.tseries.index.DatetimeIndex?
【发布时间】:2014-11-05 23:32:37
【问题描述】:

我有一个普通的 df.index,我想增加几个小时。

In [1]: test[1].index
Out[2]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2010-03-11, ..., 2014-08-14]
Length: 52, Freq: None, Timezone: None

这是第一个元素的样子:

In [1]: test[1].index[0]
Out[2]: Timestamp('2010-03-11 00:00:00')

所以我试试这个来增加时间:

In [1]: test[1].index[0] + pd.tseries.timedeltas.to_timedelta(16, unit='h')

但是我明白了:

Out[2]: Timestamp('2010-03-11 00:00:00.000000016')

但我想得到这个:

Out[2]: Timestamp('2010-03-11 16:00:00')

我错过了什么?环境是 Anaconda (latest) Python 2.7.7, iPython 2.2

非常感谢

【问题讨论】:

    标签: python pandas indexing time-series dataframe


    【解决方案1】:

    你可以使用pd.DateOffset:

    test[1].index + pd.DateOffset(hours=16)
    

    pd.DateOffset 接受与dateutil.relativedelta 相同的关键字参数。


    您遇到的问题是由于 fixed in Pandas version 0.14.1 的这个错误:

    In [242]: pd.to_timedelta(16, unit='h')
    Out[242]: numpy.timedelta64(16,'ns')
    

    如果您升级,您的原始代码应该可以工作。

    【讨论】:

    • 你能简单解释一下我所做的有什么问题吗?
    • 什么都没有。我刚刚在 Pandas 0.14.1 中尝试了你的例子,它就像你想象的那样工作。 unutbu 为您提供了一种适用于旧版本 pandas 的解决方法(相当旧,而不是石器时代;))
    • 我想知道如何减去偏移量:我尝试了以下命令,但没有产生预期的结果:``` test[1].index - pd.DateOffset(hours=16)。有什么线索吗?
    • @amonk 您是否尝试添加负偏移量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多