最近,我尝试读取MODIS云属性数据。我试着合并/合并MOIDS文件,但是NetCDF和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文件吗?
非常感谢。余航
发布于 2020-11-18 15:32:44
我建议使用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:请明智地选择变量名称;)
https://stackoverflow.com/questions/64875916
复制相似问题