我注意到,虽然串联多个年度的NetCDF文件合并成一个文件,或在分割一个时间序列文件转换成逐年组,xarray的.to_netcdf()自动更新的时间单位。我的意思例
# time attribute of the file
ncdump -h file_1970_2017.nc
>>double time(time) ;
time:_FillValue = NaN ;
time:units = "Hours since 1900-01-01T00:00:00+00:00" ;
time:calendar = "proleptic_gregorian" ;
# after splitting the files into yearly files using group-by method the time attribute is automatically modified
# example
ncdump -h file_splitted_2005.nc
>>double time(time) ;
time:_FillValue = NaN ;
time:units = "Hours since 2005-01-01T00:00:00+00:00" ;
time:calendar = "proleptic_gregorian" ;
同样的问题是遇到当我做反之亦然,这是我个人串联每年的文件到一个共同文件。是否有某种方式,我可以迫使它无法改变的时候属性?从documentation,似乎“编码”的说法可能有帮助,但我无法弄清楚如何?
弄清楚了。使用一个嵌套的字典这是可以实现的编码参数
# when writing out the dataset ds encoding can be used as
ds.to_netcdf('file_splitted_2005.nc', encoding={'my_variable':{'_FillValue': -999.0},'time':{'units': "seconds since 1900-01-01 00:00:00"}})
如果我理解正确的,而写出来的数据,xarray会自动重新计算依据是什么单位属性我们指定,如果我们的时间序列是一个DateTime对象的时间值。在这种情况下,它使用引擎盖下的智能日期时间功能。这意味着我也可以指定
'time':{'units': "seconds since 2000-01-01 00:00:00"}
它会自动重新计算它存储在时间序列使生活对我们来说更容易的值。