赞
踩
python在处理数据的时候往往需要将一些过程变量存储出来,气象处理中常常存为nc形式、dat、npy等形式。而在存储为nc形式的时候常常需要写入一些维度的信息,对于python来说常常用xarray或者netCDF4来读写。
代码如下(示例):
import netCDF4 as nc
import numpy as np
import pandas as pd
import xarray as xr
#读取nc文件
data = xr.open_dataset('data/CN05_pr_daily_1981-2015.nc')
pr = data['pr']
lat = data['lat']
lon = data['lon']
#处理成分季节平均
prs = pr.groupby(pr.time.dt.season).mean()
代码如下(示例):
#生成新的NC文件方式一 ds = xr.Dataset({'prs': prs, 'lon': lon, 'lat': lat}) ds['time'] = data.time # set attributes for lat and lon variables ds['lat'] = ds.lat ds['lat'].attrs['units'] = 'degrees_north' ds['lat'].attrs['axis'] = 'Y' ds['lat'].attrs['long_name'] = 'latitude' ds['lat'].attrs['standard_name'] = 'latitude' ds['lon'] = ds.lon ds['lon'].attrs['units'] = 'degrees_east' ds['lon'].attrs['axis'] = 'X' ds['lon'].attrs['long_name'] = 'longitude' ds['lon'].attrs['standard_name'] = 'longitude' # save result dataset ds.to_netcdf(f'cn05_pr_seasonaly_mean_1981-2015_01.nc') # close file ds.close() #生成新的NC文件方式二 #w表示写入 lon_grid = np.arange(69.75, 140.5, 0.25) lat_grid = np.arange(14.75, 55.5, 0.25) se = np.arange(0,4,1) data_NC = nc.Dataset('cn05_pr_seasonaly_mean_1981-2015_02.nc', 'w', format='NETCDF4') data_NC.createDimension('lat', 163) data_NC.createDimension('lon',283) data_NC.createDimension('season',4) # 创建维度变量,createVariable(变量名,值类型,维度)注意这里的维度就是上面创建维度的名称,不然会#报错 data_NC.createVariable("lat", 'f', ('lat')) data_NC.createVariable("lon", 'f', ('lon')) data_NC.createVariable("season", 'f', ('season')) # 创建变量,("对应的函数值", '数据类型', ( "变量一", "变量二"))我创建的是二维数组 data_NC.createVariable("prs", 'f', ( "season","lat","lon")) data_NC.variables['lat'][:] = lat_grid data_NC.variables['lon'][:] = lon_grid data_NC.variables['season'][:] = se # 给变量填充数据,和维度填充数据方式是一样的,就是存进去 data_NC.variables['prs'][:,:,:,] = prs[:,:,:,] # 关闭文件,当报错后一定要单独运行一下这一行,把nc文件关闭,不然他一直处于打开状态,会报错,然后找到#当前nc文件删除,重新运行 data_NC.close()
两种写入nc文件的方式各不相同,结果也有细微不同。
可以从上述截图中看出,第一种输出的nc文件包含了时间维度和季节作为时间属性,而第二种nc文件不包含time。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。