如何从自动改变写出NetCDF文件时的时间属性停止xarray?

问题描述 投票:1回答:1

我注意到,虽然串联多个年度的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,似乎“编码”的说法可能有帮助,但我无法弄清楚如何?

python-3.x netcdf python-xarray
1个回答
1
投票

弄清楚了。使用一个嵌套的字典这是可以实现的编码参数

# 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"}

它会自动重新计算它存储在时间序列使生活对我们来说更容易的值。

© www.soinside.com 2019 - 2024. All rights reserved.