首页 > 解决方案 > 我们可以将 pandas.DatetimeIndex 的日历指定为 'noleap' 吗?或者 datetime.timedelta 可以跳过 2 月 29 日吗

问题描述

我的熊猫数据框有 DatetimeIndex: DatetimeIndex(['1950-02-07', '1951-12-30, '1952-03-04',........'2020-04 -07'],dtype='datetime64[ns]',长度=589,频率=无))

我想通过在 no-leap 365 日历中使用 timedelta by days=-4 来移动索引,例如:'1952-03-04' timedelta(days=-4) 我想得到 '1952-02-28'而不是“1952-02-29”

谁能给我一些建议?

非常感谢你。

标签: pandasdatetimetimedeltadatetimeindex

解决方案


我们可以将 pandas.DatetimeIndex 的日历指定为 'noleap' 吗?

我想不是。

datetime.timedelta 可以跳过 2 月 29 日吗?

我想不是。

一种可能的解决方案是测试此日期并在条件下通过减去日期更改 timedelta:

a = ['1952-03-04', '1951-12-30']
idx = pd.to_datetime(a)
print (idx)
DatetimeIndex(['1952-03-04', '1951-12-30'], dtype='datetime64[ns]', freq=None)

out = idx - pd.Timedelta(4, unit='days')
print (out)
DatetimeIndex(['1952-02-29', '1951-12-26'], dtype='datetime64[ns]', freq=None)

out = np.where((out.day == 29) & (out.month == 2), out - pd.Timedelta(1, unit='days'), out)
print (out)
['1952-02-28T00:00:00.000000000' '1951-12-26T00:00:00.000000000']

推荐阅读