如何从具有成组变量的MODIS中读取多个NetCDF文件



最近我尝试读取MODIS Cloud属性数据。我尝试合并/组合MOIDS-NetCDF文件,但ncrcat或CDO都不起作用。然后我发现MODIS中的变量数据是在每组中收集的。

a='MCD06COSP_M3_MODIS.A2002182.061.2020181145824.nc'
b=nc.Dataset(a)
print(b.groups.keys())
c=b.groups['Cloud_Mask_Fraction']
print(c.variables['Mean'])

然后它将给出结果

dict_keys(['Solar_Zenith', 'Solar_Azimuth', 'Sensor_Zenith', 'Sensor_Azimuth', 'Cloud_Top_Pressure', 'Cloud_Mask_Fraction', 'Cloud_Mask_Fraction_Low', 'Cloud_Mask_Fraction_Mid', 'Cloud_Mask_Fraction_High', 'Cloud_Optical_Thickness_Liquid', 'Cloud_Optical_Thickness_Ice', 'Cloud_Optical_Thickness_Total', 'Cloud_Optical_Thickness_PCL_Total', 'Cloud_Optical_Thickness_Log10_Liquid', 'Cloud_Optical_Thickness_Log10_Ice', 'Cloud_Optical_Thickness_Log10_Total', 'Cloud_Particle_Size_Liquid', 'Cloud_Particle_Size_Ice', 'Cloud_Water_Path_Liquid', 'Cloud_Water_Path_Ice', 'Cloud_Retrieval_Fraction_Liquid', 'Cloud_Retrieval_Fraction_Ice', 'Cloud_Retrieval_Fraction_Total'])
<class 'netCDF4._netCDF4.Variable'>
float64 Mean(longitude, latitude)
_FillValue: -999.0
title: Cloud_Mask_Fraction: Mean
units: none
path = /Cloud_Mask_Fraction
unlimited dimensions: 
current shape = (360, 180)
filling on

在许多组中还有其他变量,我需要读取所有其他文件或合并这些文件。所以我想知道如何使用组读取多个NetCDF文件?由于我必须读取这些数据数年,我如何才能为每个变量创建具有新维度时间的数组?python中的CDO、ncrcat或xarray可以合并这种nc文件吗?

非常感谢。余杭

我建议使用xarray作为python中最先进的4D网格数据处理程序。

你必须安装netcdf4,我建议h5netcdf,因为处理速度更快。

path_to_file = 'MCD06COSP_M3_MODIS.A2002182.061.2020181145824.nc'
# if h5netcdf is installed:
data = xarray.open_dataset(path_to_file, engine='h5netcdf') 
# if just netcdf4 is installed:
data = xarray.open_dataset(path_to_file)
# access variables:
data[<variable_name>]
data.<variable_name>
# inspect whole file:
data

您可以将多个文件加载到一个数据集中:

datasets = xarray.open_datasets([path_to_file_1, path_to_file_2], parallel=True)

我预计会出现一些错误,以防您有不同的时间跨度,但您可以找到解决此类问题的方法。

我在这里添加了并行化以提高解析速度。请通过云存储或类似链接添加测试数据,否则社区无法帮助您更喜欢这些建议。

PS:请明智地选择变量名称;(

最新更新