Xarray 更改时间单位变量

Xarray change unit in time variable

我有一个 nc 文件,其中时间变量无法被 xarray.open_dataset() 解码,因为单位在 'days_since_Jan11900' 中,这是 days 变量的完整信息:

<xarray.DataArray 'days' (time: 87600)>
array([679352., 679353., 679354., ..., 766949., 766950., 766951.])
Dimensions without coordinates: time
Attributes:
    units:      days_since_Jan11900
    long_name:  calendar_days

我已经用ds = xr.open_dataset('path/tmax_bcc-csm1-1.nc', decode_times = False)打开了文件,但现在我想把nc文件的单位改成Python可以轻松解码的单位。在我的例子中,时间单位是从 0000 年 1 月 1 日开始的天数。它最终会让我的分析变得更容易。

我该怎么做?

为了解码时间,xarray 搜索包含 units 形式 "{time_unit} since {reference_date}" 属性的变量。在你的情况下,我会覆盖你的 DataArray 上的单位属性,然后手动解码时间:

ds.days.attrs["units"] = "days since 0000-01-01"
result = xr.decode_cf(ds)

正如我评论的那样,一个警告是我怀疑您的参考日期无效,因此解码时间可能会引发错误。