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)
正如我评论的那样,一个警告是我怀疑您的参考日期无效,因此解码时间可能会引发错误。
我有一个 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)
正如我评论的那样,一个警告是我怀疑您的参考日期无效,因此解码时间可能会引发错误。