python重新读写NC文件
•
Python
python重新读写NC文件
python重新读写NC文件
- python重新读写NC文件
- 前言
- 使用步骤
-
- 1.引入库并读取数据文件
- 2.写入文件
- 总结
前言
python在处理数据的时候往往需要将一些过程变量存储出来,气象处理中常常存为nc形式、dat、npy等形式。而在存储为nc形式的时候常常需要写入一些维度的信息,对于python来说常常用xarray或者netCDF4来读写。
使用步骤
1.引入库并读取数据文件
代码如下(示例):
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()
2.写入文件
代码如下(示例):
#生成新的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。
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/93ae02c23c.html
