使用xarray在netCDF中输出int32时间维度

5
假设我有一个xarray数据集,其中包含以下时间数据:
ds = xr.Dataset({'time': pd.date_range('2000-01-01', periods=10)})
ds.to_netcdf('asdf.nc')

xarray的to_netcdf()方法将时间维度输出为int64:

$ ncdump -v time asdf.nc
netcdf asdf {
dimensions:
    time = 10 ;
variables:
    int64 time(time) ;
        time:units = "days since 2000-01-01 00:00:00" ;
        time:calendar = "proleptic_gregorian" ;
data:

 time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}

因为我正在使用一个不支持int64的THREDDS服务器,所以我希望这些时间数据可以是int32。使用xarray可以实现吗?

1个回答

6

您可以通过encoding属性或encoding关键字参数来指定每个输出变量的数据类型,以便进行to_netcdf。在您的示例中,这将非常简单,只需像这样:

ds.to_netcdf('asdf.nc', encoding={'time': {'dtype': 'i4'}})

在xarray文档中可以找到有关编写编码数据的更多信息:http://xarray.pydata.org/en/latest/io.html#writing-encoded-data


1
截至2023年3月和THREDDS 5.4版本,通过THREDDS服务器访问NetCDF文件仍然存在OPENDAP访问问题。而且,这个答案仍然非常有效,谢谢! - pjw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接