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

时间:2019-02-25 14:18:53

标签: python netcdf python-xarray

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

  • time
  • lat
  • lon
  • Lai_500m
  • FparLai_QC

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

现在,我只想选择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

有人知道如何实现我的数据选择吗?

2 个答案:

答案 0 :(得分:2)

Xarray的where method对这种操作有好处:

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

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

答案 1 :(得分:1)

在这种情况下,我不会在任何地方使用。如果您使用Xarray读取netcdf文件,则我更愿意使用sel(按值过滤)或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')