为xarray open_mfdataset指定concat_dim

时间:2017-03-03 09:09:11

标签: python python-xarray

我使用xarray.open_mfdataset()打开并组合8个netcdf文件(模型模拟与不同设置的输出),而不将它们加载到内存中。如果我指定concat_dim='run_number',这会将run_number添加为没有坐标的维度,并使用0到7之间的值填充它。

问题是,现在,我不知道哪个run_number属于哪个模拟。原始的netcdf都具有帮助我区分它们的属性,例如: identifyer=1identifyer=2等,但即使我指定concat_dim='identifyer'(也许是因为有很多属性?),xarray也无法识别这一点。

有什么方法可以告诉xarray必须将此属性用作concat_dim?或者,xarray以哪种顺序读取输入文件,以便我可以推断新维度的哪个值对应于哪个模拟?

1 个答案:

答案 0 :(得分:2)

Xarray将使用现有标量坐标的值来标记结果坐标,但它不会查看属性。只查看坐标中找到的元数据是xarray中的general theme:我们只将attrs留给用户代码。因此,您应该为每个数据集分配标量'identifyer'坐标,例如,使用preprocess open_mfdataset参数{/ 1}}:

def add_id(ds):
    ds.coords['identifyer'] = ds.attrs['identifyer']

xarray.open_mfdataset(path, preprocess=add_id)

或者,您可以将明确的文件名列表传递给open_mfdataset,也可以依赖于open_mfdataset在组合文件名之前对文件名称进行排序的事实:数据集将始终按字典顺序组合他们的名字。