本代码目的:
1.批量读取nc降水数据集。
2.按照季节平均来粗略绘制降水量图。
3.保存所有处理后的数据集,以备下次精细化绘图。
原始数据请见美国2013-2021年每日降水的nc数据集资源-CSDN文库
- ##1.导入需要的库和函数
- import xarray as xr
- import os
- from netCDF4 import Dataset
-
- ##2.指定文件路径,实现批量读取满足条件的文件.(批量读取多个nc文件)
- path = r"D:/baseCode/raw/"
- #file = os.listdir(path)
- #print(file) #输出nc文件列表
-
- ##3.创建一个空的数据集来存储结果
- result = xr.DataArray()
-
- ##4.遍历文件夹下的nc文件
- for root_dir, sub_dir, files in os.walk(path):
- for file in files:
- if file.endswith('.nc'):
- file_name=os.path.join(root_dir, file)
- #print(file_name) #读取nc文件路径
-
- ##5.通过xarray读取nc数据
- f1=xr.open_dataset(file_name)
- #print(f1)
- #print(f1.dims) #返回一个字典类型。维度包括time,lat,lon。
- #print(f1.variables) #查看nc文件中的变量。
- dims =['time', 'lat', 'lon']
- #for dim in dims:
- #print('%s:%s' %(dim, f1.dims[dim]))
-
- ##6.读取nc数据中的经纬度和时间以及其他变量
- lat=f1.variables['lat'][:]
- lon=f1.variables['lon'][:]
- time=f1.variables['time'][:]
-
-
- #print(time.attrs)
- #print(time[90:270])
- precip=f1['precip']
-
- ##7.计算年降水量
- f1_season_sum = precip.groupby('time.year').sum(dim='time')
- print(type(f1_season_sum))
- #print(f1_season_sum)
-
- ##8.计算季节性降水平均值
- f1_season_mean = precip.groupby('time.season').mean(dim='time')
-
- #绘制并导出季节性平均降水量图。
- #f1_season_mean.plot(col='season')
- #plt.savefig(path+'season_figure.png', dpi=300)
-
-
- ##9.将计算结果添加到结果数据集中
- result = xr.concat([result, f1_season_sum], dim='file')
-
- #print(result) #查阅合并的数据集。
-
-
- ##10.将结果数据导出到path路径下。
- result.to_netcdf(path+'f1_season_sum_eachyear.nc')