我想将我的 xarray 写入 netcdf 文件。我通过使用形状文件从我具有掩码的 netcdf 文件派生了它。这是它的样子:
<xarray.Dataset>
Dimensions: (DATE: 14245, x: 214, y: 173)
Coordinates:
* DATE (DATE) datetime64[ns] 1980-01-01T12:00:00 ... 2018-1...
* x (x) float64 6.168e+05 6.171e+05 ... 6.698e+05 6.701e+05
* y (y) float64 5.113e+06 5.113e+06 ... 5.156e+06 5.156e+06
transverse_mercator int64 0
Data variables:
precipitation (DATE, y, x) float32 nan nan nan nan ... nan nan nan
Attributes:
CDI: Climate Data Interface version 1.9.9 (https://mpimet.mpg.de...
Conventions: CF-1.5
Title: Daily total precipitation Trentino-South Tyrol 250-meter re...
Created on: Fri Feb 26 21:30:51 2021
history: Fri Feb 26 23:31:30 2021: cdo -z zip -mergetime DAILYPCP_19...
CDO: Climate Data Operators version 1.9.9 (https://mpimet.mpg.de...
如果我试着把它写成:
ds_subset.to_netcdf('test.nc')
但是,我收到以下错误:
ValueError: failed to prevent overwriting existing key grid_mapping in attrs. This is probably an encoding field used by xarray to describe how a variable is serialized. To proceed, remove this key from the variable's attributes manually.
由于我找不到问题所在的密钥,我尝试将其保存为 xarray 为:
xr.save_mfdataset(ds_subset, 'test.xr')
但我收到以下错误:
ValueError: cannot use mode='w' when writing multiple datasets to the same path
我更喜欢第一个解决方案。我有两点要指出:i)我觉得问题是由于原始文件是数据集; ii) 原始 netcdf 文件似乎有一些缺失的字段,我用 rioxarray 填充
但是,我无法找出问题所在。
感谢您的帮助。
我希望这里有一些其他有用的信息: 这是
的结果ds_subset.precipitation.attrs["grid_mapping"]
Out[3]: 'transverse_mercator'
,
ds_subset.encoding
Out[4]: {}
和
ds_subset.precipitation.encoding
Out[5]:
{'zlib': True,
'szip': False,
'zstd': False,
'bzip2': False,
'blosc': False,
'shuffle': True,
'complevel': 1,
'fletcher32': False,
'contiguous': False,
'chunksizes': (1, 643, 641),
'source': 'read file path',
'original_shape': (14245, 643, 641),
'dtype': dtype('float32'),
'missing_value': -999.0,
'_FillValue': -999.0,
'grid_mapping': 'transverse_mercator'}
关于你的第二个问题。此语法仅适用于迭代的数据集和名称。您必须指定
xr.save_mfdataset([ds_subset], ['test.nc'])
,因为 save_mfdataset
旨在用于多个数据集,利用 dask 启用同步写入操作。也就是说,如果你只传递一个数据集(和名称),你还不如使用to_netcdf
.
使用这个
xr.save_mfdataset([ds_subset], ['test.nc'])
,你可能会得到与你的第一个问题(上面已经回答)相关的相同错误。