无法选择xarray中的坐标切片

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

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

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

我也尝试过在将 grib 文件转换为 netcdf 文件之前选择初始状态下的区域,并收到以下错误

> 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-climate grib eccodes
1个回答
0
投票

这不是一个 xarray 解决方案,但如果您愿意,您可以使用 cdo 包 在一行中完成此操作:

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

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