如何将 float 数组转换为 365 日历白天? (不包括闰年)

How to convert array of float into 365-calendar daytime? (excluding leap year)

我有一个 nc 文件,其中日期单位已关闭。

<xarray.DataArray 'days' (time: 6570)>
array([730817., 730818., 730819., ..., 737384., 737385., 737386.])
Dimensions without coordinates: time
Attributes:
    units:      days_since_Jan11900
    long_name:  calendar_days

我想将这些转换为不考虑闰年的日期,因为我的数据在一年 365 天的日历上,这意味着数据集中没有闰年这样的东西。我试过这个

ds['days'] = ds.days - 730817
ds.days.attrs['units'] = 'days since 2001-05-30'

但是,2004年的闰年让我比前三年早了一天。因此,它从 5 月 29 日开始,但这是不正确的,因为根据一年 365 天的日历,它实际上是 5 月 30 日。 我想要的是我的时间单位不断显示从 2001 年 5 月 30 日到 8 月 18 日,2002 年 5 月 30 日到 8 月 18 日,等等,甚至在闰年。所以基本上将我的范围替换为:

<xarray.DataArray 'days' (time: 6570)>
array([30-05-2001, 31-05-2001, ..., 18-08-2001, ..., 18-08-2015, 30-05-2016, ...,])

我该怎么做?

编辑 我现在尝试包括@spencerkclark 的方法。

ds['days'] = ds.days - 730817
ds.days.attrs['units'] = 'days since 2001-05-30'
ds['days'].attrs['calender'] = 'noleap'
ds = xr.decode_cf(ds)

但是,我仍然是闰年的 2 月 29 日。因此,我的最后一个日期向后移动到 2099-11-02,而它应该保持在 2099-12-31。不幸的是,所以没有完全修复。

将日历属性添加到 'days' 坐标,xarray 会将假定 'noleap' 日历的时间解码为 cftime.DatetimeNoLeap 对象:

ds['days'].attrs['calendar'] = 'noleap'
ds = xr.decode_cf(ds)