当前位置:   article > 正文

python重新读写NC文件_python 数据写入nc文件

python 数据写入nc文件

python重新读写NC文件



前言

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

总结

两种写入nc文件的方式各不相同,结果也有细微不同。
两种文件
可以从上述截图中看出,第一种输出的nc文件包含了时间维度和季节作为时间属性,而第二种nc文件不包含time

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/572858
推荐阅读
相关标签
  

闽ICP备14008679号