将多个月的nc数据文件合并成一个(月平均)
将多个月的nc数据文件合并成一个(月平均)
最近在处理nc数据,希望可以获得多年的月平均数据。但是ERA这个产品从网站上下载到的是每个月的日数据,所以我希望可以把他合成一个,以每个月月平均数据存储的nc文件。
首先是引入要用的库:
from netCDF4 import Dataset #nc库功能不用说,读nc文件肯定要用
import numpy as np
from pandas import Series
import netCDF4 as nc
import tkinter as tk
from tkinter import filedialog #这两个是用来读取文件夹的
定义一个nc文件类:
class ncfile:def __init__(self,file_name):#用于读取数据NCfile=nc.Dataset(file_name)#获取维度的值,一般有时间、经纬度、各个数值self.time=NCfile.variables['time'][:].dataself.latitude=NCfile.variables['latitude'][:].dataself.longitude=NCfile.variables['longitude'][:].dataself.e=NCfile.variables['e'][:].dataself.sro=NCfile.variables['sro'][:].dataself.ssro=NCfile.variables['ssro'][:].dataself.tp=NCfile.variables['tp'][:].data
定义几个要用的全局变量:
n=0 #这个用来记录读入的文件数
'''
下面是用来存储原始数据的,其实像time、latitude、longitude这种是不需要单独
记录的,只是为了在后面偷个懒,就顺便打上了,但是这里其实占用了一部分内存,不太好
'''
times=[]
latitudes=[]
longitudes=[]
es=[]
sros=[]
ssros=[]
tps=[] #下面的是用来存储最后要写入的数据
times_after=[]
latitudes_after=[]
longitudes_after=[]
es_after=[]
sros_after=[]
ssros_after=[]
tps_after=[]
然后定义读入文件的函数:
def read_files():#读取存放要合并文件的文件夹root=tk.Tk()root.withdraw()Folderpath=filedialog.askdirectory() filelist = os.listdir(Folderpath)global nn=len(filelist)for i in range(n):temp=ncfile(str(Folderpath)+"/"+filelist[i])times.append(temp.time)latitudes.append(temp.latitude)longitudes.append(temp.longitude)es.append(temp.e)sros.append(temp.sro)ssros.append(temp.ssro)tps.append(temp.tp)
处理数据,得到每个月月平均值的矩阵:
read_files()
for i in range(n):tps_after.append(np.mean(tps[i],axis=0))es_after.append(np.mean(es[i],axis=0))sros_after.append(np.mean(sros[i],axis=0))ssros_after.append(np.mean(ssros[i],axis=0))
最后创建新的nc文件并写入数据:
#写入部分
#创建新文件
new_NC = nc.Dataset("test-result.nc", 'w', format='NETCDF4')'''
定义维度,后一个参数表示维度的长度,因为是合并的同一个产品的数据,所以是统一
的,注意维度的长度一定要和读入的数据匹配
'''
new_NC.createDimension('time', n)
new_NC.createDimension('latitude', len(latitudes[0]))
new_NC.createDimension('longitude', len(longitudes[0]))
new_NC.createDimension('e', len(es[0]))
new_NC.createDimension('sro', len(sros[0]))
new_NC.createDimension('ssro', len(ssros[0]))
new_NC.createDimension('tp', len(tps[0]))#定义变量,这里需要规定变量的类型,以及限制它的维度
#可以看到,四个与数据相关的变量,其由另外三个基本维度约束
new_NC.createVariable('time', 'u4',("time"))
new_NC.createVariable('latitude', 'f', ("latitude"))
new_NC.createVariable('longitude', 'f', ("longitude"))
new_NC.createVariable('e', 'f', ("time","latitude","longitude"))
new_NC.createVariable('sro', 'f',("time","latitude","longitude"))
new_NC.createVariable('ssro', 'f',("time","latitude","longitude"))
new_NC.createVariable('tp', 'f',("time","latitude","longitude"))#向变量中填充数据
new_NC.variables['latitude'][:] = latitudes[0]
new_NC.variables['longitude'][:] = longitudes[0]new_NC.variables['e'][:]=np.array(es_after)
new_NC.variables['sro'][:]=np.array(sros_after)
new_NC.variables['ssro'][:]=np.array(ssros_after)
new_NC.variables['tp'][:]=np.array(tps_after)#最后记得关闭文件
new_NC.close()
新人,还在学习和探索中,有问题请各位大佬指正。
将多个月的nc数据文件合并成一个(月平均)相关推荐
- mysql多行合并成一行_数据文件合并与拆分
[摘要] 本文介绍将多个文本文件和 Excel 文件合并成一个文件,或者将一个文件拆分成几个小文件时,如何处理会遇到的几种情况,并用 esProc SPL 举例实现. 在数据处理业务中,经常要把文件结 ...
- php 根据一个数据组的id 取得另一个数据组对应的名称,怎样从两个spss的数据文件中选出id相同的数据,合并成一个文件...
求教高手怎样从两个spss的数据文件中选出id相同的数据,合并成一个文件.谢谢.排序后用merge file操作,怎么原数据没有变化?output中提示这些 Renaming has created ...
- peel在Linux生成excel,如何将多个Excel文件合并成一个且保留原有数据?
如何将多个Excel文件合并成一个且保留原有数据?事实上,我们可以借用Excel宏命令来处理该操作,并且保留原有数据,建立多个Sheet页,具体操作请看下文多个Excel文件合并成一个的方法. 如何将 ...
- excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...
Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...
- 怎么让两个java文件关联,怎么把多个excel文件合并成一个【几个excle合并成一个】...
怎么把多个excel文件合并成一个 新建一个BOOK文件,按Alt F11这二个键,VBA编辑界面,点击编辑的菜单:"插入"--"",然后在里面完整复制下面的代 ...
- linux下将多个文件去除文件头合并_Linux下把多个文件合并成一个文件 - 卡饭网...
互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档 互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档 互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档 一.下载并安 ...
- 将一个excel多个文件合并成一个文件的多个sheet
将一个excel多个文件合并成一个文件的多个sheet 1.在新建文件夹目录下,将需要合并的excel文档放到该目录下 2.新建一个空白文档,将鼠标移动到sheet工作表上,单击右键,选择" ...
- 多个txt文件合并成一个文本
如何将多个txt文件合并成一个文本 (1)将多个txt文件放在一个文件夹下. (2)编写一个批处理文件,里面的命令为type *.txt >a.txt (3)执行该批处理文件,则所有txt文件合 ...
- java io合并两个txt文件_java将多个txt文件合并成一个文件
[实例简介] [实例截图] [核心代码] package com.mingrisoft; import java.awt.BorderLayout; import java.awt.EventQueu ...
最新文章
- bert推理速度太慢如何解决
- CMU发布船新「论文评审」Python程序,淘汰人工审核,自动给arXiv打分
- 数据丢失如当头棒喝,数据备份重如山!
- Python Django模板页面自定义过滤器实现md语法及字符串切割代码示例
- postfix文档修正
- Ubuntu 16.04 安装网易云音乐
- vue中设置子组件的点击事件不影响父组件的点击事件
- php 编译 sass,如何在Symfony 3中使用纯PHP编译SASS(scss)
- 梳理 | 交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)
- 如何提升代码的安全性 —— 代码防御性编程的十条技巧
- 中兴b860刷机运行Linux,整理 B860A 刷机,安装第三方,升降固件,进recovery
- qt geomery的单位是什么_生命吗哪QT灵修11月28日
- WIN 7 系统 问题记录
- hualinux 编程概念 3.11 快速原型模型:以最快最小代价完成产品特性
- 运动无线耳机哪个品牌比较好、口碑最好的运动蓝牙耳机
- linux下kegg注释软件,工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧...
- 空字符串、NULL、空格串的区别
- unzip error 22 - Invalid argument
- 2019-9-2-程序员壁纸
- 爱科设立爱科农业基金会
热门文章
- vue 程序执行的过程
- python编程语言创始人-人工智能“网红”编程语言Python进入山东小学课本
- VisualSVN Server是什么
- 宏与内联函数(面试常考)
- WordPress主题分享:Avada主题v7.8.0免费下载 2022年最新版
- access窗体转换html,Access窗体之间控件的传值三种方式
- symbol DS3578条码扫描器设置回车
- java开发高端说法_扣丁学堂教你如何成为JavaEE高端开发人才
- python高德地图api调用实例_Python 利用高德地图api实现经纬度与地址的批量转换...
- C#七层架构 ----【登录】