python批量将多年降水的nc数据处理为季节性平均降水量或年降水量

 本代码目的:

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')

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值