如何从 xarray 中删除和识别密钥以编写 netcdf 文件?

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

我想将我的 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'}
error-handling key netcdf python-xarray file-writing
1个回答
0
投票

关于你的第二个问题。此语法仅适用于迭代的数据集和名称。您必须指定

xr.save_mfdataset([ds_subset], ['test.nc'])
,因为
save_mfdataset
旨在用于多个数据集,利用 dask 启用同步写入操作。也就是说,如果你只传递一个数据集(和名称),你还不如使用
to_netcdf
.

使用这个

xr.save_mfdataset([ds_subset], ['test.nc'])
,你可能会得到与你的第一个问题(上面已经回答)相关的相同错误。

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