不能在 xarray 中选择坐标的子区域

Cant select subregion of coordinates in xarray

提问人:NissesDream 提问时间:11/3/2023 最后编辑:ClimateUnboxedNissesDream 更新时间:11/3/2023 访问量:36

问:

我正在尝试将天气文件从 转换为 然后缩小这些文件所覆盖的区域。gribnetcdf

dsgrib = xr.open_dataset("infile", engine = "cfgrib")
dsgrib.to_netcdf("outfile.nc)

转换本身有效。但是,如果我尝试减小 netcdf 文件中的面积,我要么会丢失变量,要么会丢失纬度和经度值。

ds = xr.open_dataset("outfile.nc")
ds = ds.sel(lon=slice(lonmin, lonmax), lat=slice(latmin, latmax))
ds.to_netcdf("newarea.nc")

但是当我尝试从命令行使用 CDO 查看文件的竞争时

cdo sinfon newarea.nc

我收到以下错误:

    subset.to_netcdf("new.nc")
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/core/dataset.py", line 1912, in to_netcdf
    return to_netcdf(  # type: ignore  # mypy cannot resolve the overloads:(
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/backends/api.py", line 1232, in to_netcdf
    dump_to_store(
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/backends/api.py", line 1279, in dump_to_store
    store.store(variables, attrs, check_encoding, writer, unlimited_dims=unlimited_dims)
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/backends/common.py", line 270, in store
    self.set_variables(
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/backends/common.py", line 308, in set_variables
    target, source = self.prepare_variable(
  File "/home/guest/Desktop/MetOcean/dev3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py", line 488, in prepare_variable
    nc4_var = self.ds.createVariable(
  File "src/netCDF4/_netCDF4.pyx", line 2962, in netCDF4._netCDF4.Dataset.createVariable
  File "src/netCDF4/_netCDF4.pyx", line 4299, in netCDF4._netCDF4.Variable.__init__
  File "src/netCDF4/_netCDF4.pyx", line 2029, in netCDF4._netCDF4._ensure_nc_success
RuntimeError: NetCDF: Invalid argument

在将文件转换为文件之前,我还尝试选择处于初始状态的区域并收到以下错误gribnetcdf

> Warning (cdf_check_variables): Number of time steps undefined, skipped
> variable u10! Warning (cdf_check_variables): Number of time steps
> undefined, skipped variable v10! Warning (cdfInqContents): No data
> arrays found!
python-xarray netcdf CDO -气候 grib eccode

评论


答:

1赞 ClimateUnboxed 11/3/2023 #1

这不是一个 xarray 解决方案,但如果你愿意,你可以使用 cdo 包在一行中做到这一点:

from cdo import Cdo
cdo=Cdo()
cdo.sellonlatbox(lonmin,lonmax,latmin,latmax,input="in.grb",output="out.nc",options="-f nc4")

用于 netcdf4,或仅用于 netcdf3 输出。nc4nc