微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jupyterhub:使用 xarray.open_mfdataset 打开多个 netCDF 文件 - 几个错误

如何解决jupyterhub:使用 xarray.open_mfdataset 打开多个 netCDF 文件 - 几个错误

我很想得到您关于 xarray 和打开多个 netcdf 文件的帮助。我有几个 .nc 文件,其中包含纬度、经度、时间作为维度。这些文件给出了从 1850-01 到 2100-12 的月大气温度。每个文件都包含不同气候模型的数据。现在我想组合这些文件来绘制一个多模型时间序列并查看多模型均值。简单地用 xr.open_dataset 打开每个文件有效,但 open_mfdataset 不行。 这些是我要打开的文件

tas_Amon_CNRM-ESM2-1_hist_ssp119_r1i1p1f2_gr_185001-210012.nc

tas_Amon_CanesM5_hist_ssp119_r10i1p1f1_gn_185001-210012.nc

tas_Amon_EC-Earth3-Veg-LR_hist_ssp119_r1i1p1f1_gr_185001-210012.nc

tas_Amon_EC-Earth3_hist_ssp119_r4i1p1f1_gr_185001-210012.nc

tas_Amon_GFDL-ESM4_hist_ssp119_r1i1p1f1_gr1_185001-210012.nc

tas_Amon_GISS-E2-1-G_hist_ssp119_r1i1p1f2_gn_185001-210012.nc

tas_Amon_IPSL-CM6A-LR_hist_ssp119_r1i1p1f1_gr_185001-210012.nc

等等...

我申请了

import xarray as xr

xr.open_mfdataset('path/to/file/*.nc',concat_dim=time)

我的第一个错误是关于具有不同日历的文件(因此时间维度是 datetime64 或对象 - 即某些文件中的格式是日期时间格式,而在其他文件中它是字符串格式)。在对该问题进行深入研究并向 xr.open_mfdataset(preprocess=...、combat_by、concat_dim 等)添加几个函数和注释后,我无法将时间坐标转换为相同的格式。 然后我发现使用 ncks -A -v time file1.nc file2.nc 我可以用文件 1 的时间坐标覆盖文件 2 的时间坐标。将 xr.open_mfdatasetconcat_dim='time' 应用到这些新的改编文件会给我一个新的 “每个维度都需要一个坐标来推断串联顺序”。 现在我想知道是否必须将文件放在同一个网格上才能使用 xr.open_mfdataset 打开它们?

我也已经尝试只打开两个具有相同时间坐标 (datetime64) 的文件,它给了我以下错误ValueError:无法解释“tas_Amon_EC-Earth3_hist_ssp119_r4i1p1f1_gr_185001-210012”。作为数字

这让我现在很模糊,因为几天以来我没有消除错误,我想,你知道为什么会发生这些错误,或者已经发生过同样的错误

解决方法

您的目标是合并多个 CMIP6 模型输出并将它们组合成一个整体均值。我不确定如何使用 xarray 解决这个问题,但是这可以通过我的 nctoolkit 包在几行中完成,该包使用 CDO 作为后端(阅读包 here)。

根据您提供的数据,我的猜测是您正在处理或多或少的原始数据,并结合了历史数据和 ssp 数据。这意味着网格将不同。因此,您可能需要通过几个步骤进行分析。首先重新网格到您选择的公共网格。我刚刚使用了下面整体中的第一个文件。其次,您要计算整体均值。以下应该没有问题。

import nctoolkit as nc
ds = nc.open_data('path/to/file/*.nc')
ds.regrid(ds[0],method = "nn")
# Asssuming some of the files have more than one variable,you might need to do this
ds.select(variable = "tas")
ds.ensemble_mean()
ds.plot()
# if you want to convert from an nctoolkit dataset to an xarray dataset:
ds_xr = ds.to_xarray()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。