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

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

我有一个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

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

python netcdf python-xarray
2个回答
2
投票

Xarray的where method适合这种操作:

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

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


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')
© www.soinside.com 2019 - 2024. All rights reserved.