Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

04-30 1958阅读

一、 netCDF4的下载注意事项及whl链接

①首先需要在网上下载相应whl的安装包

(注意:一定要保证版本与Python解释器版本一致,比如我的解释器是3.11版本,电脑是windows64位的系统,那么就选择netCDF4-1.6.5-cp311-cp311-win_amd64.whl进行下载)

在网上看到过一些下载地址,但是好多没法用,这里提供一个,不需要梯子:

https://pypi.org/project/netCDF4/

Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

②安装netCDF4

将下载好的whl文件放在其他的下载Python包放置的目录下,而后win+R进入DOS命令窗口输入如下命令进行安装

pip install netCDF4-1.6.5-cp311-cp311-win_amd64.whl

Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

  • 下载超时的话可以在网上找一些镜像网址来用,这里提供一个:
    https://pypi.tuna.tsinghua.edu.cn/simple
    
    • 如果下载失败,常见的问题如下:未安装cftime或者numpy版本太旧

      二、代码内容

      ①数据准备:2010年nc数据文件夹,在其中包含3个子文件夹,每个文件夹中包含有若干nc文件

      Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

      Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

      ②代码介绍:

      1. 基本信息查看和确定:

      首先,我们要看一下这些nc文件里都有什么东西:

      import netCDF4 as nc
      import numpy as np #后续寻找合适经纬度的索引需要用到
      #获取相应nc数据的值
      nf = nc.Dataset(r'D:\nc文件处理\CMORPH-0.25-1h01\2010\CMORPH_V1.0_ADJ_0.25deg-HLY_2010040900.nc',encoding='gbk')
      #输出nc数据的相应含义
      print(nf.variables.keys())
      

      显示数据元素分别有:时间、时间范围、纬度、纬度范围、经度、经度范围、降水量。

      Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

      而后,我们查看时间的具体内容:

      print(nf.variables['time'][:])
      

      显示数据是以秒(seconds)计的,是从1970年1月1日0时以来的秒数。

      Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

      所以需要将数据转化为更直观更可读的形式:

      time = nc.num2date(nf.variables['time'][:],'seconds since 1970-01-01 00:00:00').data
      

      最后,因为一幅nc数据只有一个时间,所以我们用索引0来读取其具体值,我们再输出可以发现,时间格式已经可以直观判断了:

      print(time[0])
      

      Python| 水文 |批量读取NC文件降水数据并导出为Excel相应格式

      1. 我们要确定所需的经纬度范围内有哪些值是符合的,比如我们的经纬度范围是:26°06′N——27°24′N、116°18′E——117°48′E。那么我们可以写一个if语句来筛选打印出符合要求的值和索引
      # 建立2个空列表,用于存放符合条件的经纬度的位置
      lst_wherelat=[]
      lst_wherelon=[]
      # 循环遍历所有纬度
      for i in range(len(var_data_lat)):
          # 要满足纬度范围26°06′N——27°24′N
          if var_data_lat[i] >= 26.1 and var_data_lat[i] = 116.3 and var_data_lon[j] '116.375': lst[6:12], '116.625': lst[12:18], '116.875': lst[18:24],
              					'117.125': lst[24:30], '117.375': lst[30:36], '117.625': lst[36:42]})
              # 添加纬度列
              data[''] = ['26.125', '26.375', '26.625', '26.875', '27.125', '27.375']
              # 使用 insert() 方法将新列插入到指定位置(在第一列位置)
              data.insert(0, '', data.pop(''))
              sheet_names = [str(dt).replace(':', '_').replace(' ', '_') for dt in var_data_time]
              # 将 DataFrame 写入 Excel 的不同 sheet 中
              data.to_excel(writer, sheet_name=sheet_names[0], index=False)
              # 关闭nc文件
              nf.close()
              
          # 保存并关闭ExcelWriter对象
          writer.save()
          writer.close()
      
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]