python - 将 DatetimeIndex 移动一年会产生意想不到的结果
问题描述
我有一个带有 a 的数据框,DatetimeIndex
并且想将日期移动一年。我以为我可以这样做df.index.shift(1, 'Y')
,但是所有日期都在年底堆积起来?
我的意思是(使用文档中的示例):
import pandas as pd
month_starts = pd.date_range('1/1/2011', periods=5, freq='MS')
print("Original:", month_starts)
print("Shifted :", month_starts.shift(1, 'Y'))
此代码创建一个DatetimeIndex
包含 5 个日期的日期并将这些日期移动一年。但是,输出是
Original: DatetimeIndex(['2011-01-01', '2011-02-01', '2011-03-01', '2011-04-01',
'2011-05-01'],
dtype='datetime64[ns]', freq='MS')
Shifted : DatetimeIndex(['2011-12-31', '2011-12-31', '2011-12-31', '2011-12-31',
'2011-12-31'],
dtype='datetime64[ns]', freq=None)
转变的预期结果将是['2012-01-01', '2012-02-01', '2012-03-01', '2012-04-01', '2012-05-01']
。我是否误解了该功能应该做什么?
注释:
- 的输出
month_starts.shift(365, 'D'))
更接近预期的结果,但并不完全如此,因为 2012 年是闰年。 pd.__version__
:1.3.0
解决方案
您可以使用 DateOffset 作为freq
:
month_starts.shift(freq = pd.DateOffset(years = 1))
给出:
DatetimeIndex(['2012-01-01', '2012-02-01', '2012-03-01', '2012-04-01',
'2012-05-01'],
dtype='datetime64[ns]', freq=None)
笔记:
谨慎使用。闰日(2 月 29 日)将转换为 2 月 28 日(根据评论)。
推荐阅读
- bash - 将变量传递给 psql 脚本
- json - 从解析服务器将对象转换为 fullJSON 的优缺点
- python-3.x - 如何解决 python 3 中未定义名称的问题
- node.js - 将大型节点模块添加到 Azure 函数
- django - Django 休息和 axios 帖子
- kotlin - Kotlin - 如何为成员字段执行索引访问器?
- angular - 通过 .ts 文件 Angular 访问 html 内容
- java - java使用SSL发送post请求,PKIX错误
- django - Django 使 CreateView 需要布尔字段
- python - Django 动态类别