Python - 基于标准的 netCDF 文件选择
Python - Criteria based selection on netCDF files
我有一个 netCDF 文件 test.nc
,包含以下变量:
time
lat
lon
Lai_500m
FparLai_QC
所有变量(time
、lat
、lon
除外)的形状为 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')
我有一个 netCDF 文件 test.nc
,包含以下变量:
time
lat
lon
Lai_500m
FparLai_QC
所有变量(time
、lat
、lon
除外)的形状为 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')