Python - 基于标准的 netCDF 文件选择

Python - Criteria based selection on netCDF files

我有一个 netCDF 文件 test.nc,包含以下变量:

所有变量(timelatlon除外)的形状为 1523、120、120。

现在我想 select 只有已标记的数据在 FparLai_QC 中具有高质量并且数据具有 Lai_500m<20.

为此我尝试了:

os.chdir(inbasedir)
data = xr.open_dataset('MCD15A3H.006_500m_aid0001.nc')
qc_data = data.loc[(dict(var='Lai_500m') < 20) &
                  (dict(var='FparLai_QC') == 0) ]

和:

os.chdir(inbasedir)
data = xr.open_dataset('MCD15A3H.006_500m_aid0001.nc')
qc_data = data.loc[(data['Lai_500m'] < 20) &
                  (data['FparLai_QC'] == 0) ]

他们都返回相同的错误:

TypeError: can only lookup dictionaries from Dataset.loc

有谁知道如何实现我的数据selection?

Xarray 的 where method 适合这种操作:

qc_data = data.where((data['Lai_500m'] < 20) & (data['FparLai_QC'] == 0))

如果您想删除仅对应于条件的 False 值的坐标标签,您可能还会发现 drop 关键字很有用。

在这种情况下我不会使用 where。如果您使用 Xarray 读取您的 netcdf 文件,我宁愿使用 sel (filtering per value) or isel(按索引过滤)。

import xarray as xr
    with xr.open_dataset(
            filename_or_obj='file_name.nc',
            engine='netcdf4') as file:
        WIND = file.WIND.sel(Lai_500m=20,
                             FparLai_QC=0).sel(
            time=start_date, method='nearest')