【问题标题】:How to manipulate index column by adding one month?如何通过添加一个月来操作索引列?
【发布时间】:2021-03-05 19:55:27
【问题描述】:

我有一个 df:

date                open    high    low     close
12/31/2005 17:00    0.85224 0.88269 0.85    0.86321
1/31/2006  17:00    0.86321 0.86438 0.83967 0.84373
2/28/2006  17:00    0.84373 0.85519 0.82036 0.83613
3/31/2006  17:00    0.83655 0.85165 0.83237 0.84776
4/30/2006  17:00    0.84776 0.86062 0.82694 0.82836
5/31/2006  17:00    0.82836 0.83802 0.8121  0.8293
6/30/2006  17:00    0.8293  0.86851 0.82221 0.86665
7/31/2006  17:00    0.86665 0.86773 0.83658 0.84212
8/31/2006  17:00    0.84246 0.85794 0.82869 0.83334
9/30/2006  17:00    0.82987 0.86971 0.82661 0.86758
10/31/2006 17:00    0.86717 0.90246 0.86284 0.89894
11/30/2006 17:00    0.89853 0.9206  0.89402 0.91748
12/31/2006 17:00    0.91748 0.93901 0.90711 0.91386
1/31/2007  17:00    0.91346 0.92743 0.90495 0.921
2/28/2007  17:00    0.92083 0.94434 0.90589 0.93246
3/31/2007  17:00    0.93192 0.95089 0.91939 0.92037
4/30/2007  17:00    0.92024 0.92818 0.87458 0.88427
5/31/2007  17:00    0.88422 0.91127 0.87847 0.90419
6/30/2007  17:00    0.90183 0.92689 0.89691 0.90782

我的索引列是dtype='datetime64[ns]

我尝试通过df.index = df.index + relativedelta(months=+1) 操作+1 month,但没有成功,收到此错误TypeError: unsupported operand type(s) for +: 'DatetimeIndex' and 'relativedelta'

尝试df.index = pd.to_timedelta(df.index) 并没有工作TypeError: dtype datetime64[ns] cannot be converted to timedelta64[ns] 已经检查了这个post,但仍然不知道该怎么做。我该怎么做才能增加 1 个月?谢谢。

附注我希望日期相同,顺便说一句,我认为 relativedelta 不能做到这一点,例如 3/31 将变为 3/28...

【问题讨论】:

  • @MrFuppes - 看来 OP 需要别的东西,检查已删除的答案。

标签: python pandas dataframe datetime timedelta


【解决方案1】:

试试这个,你几乎成功了。只需添加 .date 即可将其转换为日期对象,以便与 relativedelta 的操作兼容

df.index = pd.to_datetime(df.index).date
df.index = df.index +  relativedelta(months=+1)

输入:

            date     open     high      low    close
12/31/2005  17:00  0.85224  0.88269  0.85000  0.86321
1/31/2006   17:00  0.86321  0.86438  0.83967  0.84373
2/28/2006   17:00  0.84373  0.85519  0.82036  0.83613
3/31/2006   17:00  0.83655  0.85165  0.83237  0.84776
4/30/2006   17:00  0.84776  0.86062  0.82694  0.82836

运行代码后的输出:

            date     open     high      low    close
2006-01-31  17:00  0.85224  0.88269  0.85000  0.86321
2006-02-28  17:00  0.86321  0.86438  0.83967  0.84373
2006-03-28  17:00  0.84373  0.85519  0.82036  0.83613
2006-04-30  17:00  0.83655  0.85165  0.83237  0.84776
2006-05-30  17:00  0.84776  0.86062  0.82694  0.82836

【讨论】:

  • 抱歉,新日期不同。例如,3/31 变成 3/28。
  • 啊..所以你现在有一个新问题:-)
【解决方案2】:

尝试使用以下方法将该列转换为datetime 类型:

df['date_2'] = pd.to_datetime(df['date']).dt.date

然后应用relativedelta 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-29
    • 2017-04-29
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2021-06-27
    • 2023-03-12
    • 2021-12-07
    相关资源
    最近更新 更多