脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python中的netCDF4批量处理NC文件的操作方法

python中的netCDF4批量处理NC文件的操作方法

2022-11-10 10:43skypanxh Python

这篇文章主要介绍了python的netCDF4批量处理NC格式文件的操作方法,使用python批量提取所有数据,查看数据属性,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、使用ArcMap提取出第一期数据

1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据

python中的netCDF4批量处理NC文件的操作方法

可以发现该数据有正确的像元大小、坐标系等

python中的netCDF4批量处理NC文件的操作方法

python中的netCDF4批量处理NC文件的操作方法

2.导出该数据作为标准数据

python中的netCDF4批量处理NC文件的操作方法

 

二、使用python批量提取所有数据

1. 查看数据属性

from netCDF4 import Dataset,num2date
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
print(data_set)

输出为

<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF3_CLASSIC data model, file format NETCDF3):
title: GRUN
version: GRUN 1.0
meteorological_forcing: GSWP3
temporal_resolution: monthly
spatial_resolution: 0.5x0.5
crs: WGS84
proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
EPSG: 4326
references: Ghiggi et al.,2019. GRUN: An observation-based global gridded runoff dataset from 1902 to 2014. ESSD, doi: https://doi.org/10.5194/essd-2019-32
authors: Gionata Ghiggi; Lukas Gudmundsson
contacts: gionata.ghiggi@gmail.com; lukas.gudmundsson@env.ethz.ch
institution: Land-Climate Dynamics, Institute for Atmospheric and Climate Science, ETH Zrich
institution_id: IAC ETHZ
dimensions(sizes): X(720), Y(360), time(1356)
variables(dimensions): float64 X(X), float64 Y(Y), float64 time(time), float32 Runoff(time, Y, X)
groups:

可以看到variables变量X、Y为经纬度,time为时间,Runoff为需要的结果

2.批量导出结果

from osgeo import gdal
from netCDF4 import Dataset,num2date
import numpy as np

def WriteTiff(im_data,inputdir, path):
  raster = gdal.Open(inputdir)
  im_width = raster.RasterXSize #栅格矩阵的列数
  im_height = raster.RasterYSize #栅格矩阵的行数
  im_bands = raster.RasterCount #波段数
  im_geotrans = raster.GetGeoTransform()#获取仿射矩阵信息
  im_proj = raster.GetProjection()#获取投影信息
  
  if 'int8' in im_data.dtype.name:
      datatype = gdal.GDT_Byte
  elif 'int16' in im_data.dtype.name:
      datatype = gdal.GDT_UInt16
  else:
      datatype = gdal.GDT_Float32
  if len(im_data.shape) == 3:
      im_bands, im_height, im_width = im_data.shape
  elif len(im_data.shape) == 2:
      im_data = np.array([im_data])
      im_bands, (im_height, im_width) = 1, im_data.shape
      # 创建文件
  driver = gdal.GetDriverByName("GTiff")
  dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
  if (dataset != None):
      dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数
      dataset.SetProjection(im_proj)  # 写入投影
  for i in range(im_bands):
      dataset.GetRasterBand(i + 1).WriteArray(im_data[i])
  del dataset
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
time = data_set.variables["time"][:]  # 获取时间一列
units = data_set.variables["time"].units # 获取第一期时间
#读取样本tif文件的地理信息
intif = "../03ProcessData/runoff_example.tif"
for i in range(0,len(time)):
  yr = num2date(time[i],units).year # 提取年份
  mon = num2date(time[i],units).month    # 提取月份
  value_data = data_set.variables['Runoff'][i]
  # 将缺失值改为0
  data = value_data.data
  mask = value_data.mask
  data[np.where(mask == True)] = 0
  outputname = "../01Data/Runoff1992-2014/tif/" + str(yr) + str(mon).zfill(2) + ".tif"
  WriteTiff(data,intif , outputname)
  print(outputname)

 

!注意事项

1.使用时候请自行修改修改输入输出文件路径与变量名称

2.根据需要处理缺失值

到此这篇关于python的netCDF4批量处理NC格式文件的操作方法的文章就介绍到这了,更多相关python netCDF4处理NC格式文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/skypanxh/p/16034602.html

延伸 · 阅读

精彩推荐
  • Python图文详解感知机算法原理及Python实现

    图文详解感知机算法原理及Python实现

    感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别(取+1和-1二值)。本文将为大家详细讲讲感知机算法的原理及实现,需要...

    Mr.Winter`4502022-08-03
  • Pythonpython opencv pytesseract 验证码识别的实现

    python opencv pytesseract 验证码识别的实现

    这篇文章主要介绍了python opencv pytesseract 验证码识别的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    叶庭云5422020-08-28
  • Python在django中使用自定义标签实现分页功能

    在django中使用自定义标签实现分页功能

    这篇文章主要介绍了在django中使用自定义标签实现分页功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    MnCu4032020-11-22
  • PythonPython Pandas读取Excel日期数据的异常处理方法

    Python Pandas读取Excel日期数据的异常处理方法

    Excel文件是传统的数据格式,但面对海量数据时,用编程的方法来处理数据更有优势,下面这篇文章主要给大家介绍了关于Python Pandas读取Excel日期数据的异常处...

    小小明-代码实体7422022-10-18
  • Python详解Python中的四种队列

    详解Python中的四种队列

    队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。这篇文章主要介绍了Python中的四种队列,需要的朋友可以参考下...

    simpleapples12082021-02-22
  • PythonPython全局变量与局部变量区别及用法分析

    Python全局变量与局部变量区别及用法分析

    这篇文章主要介绍了Python全局变量与局部变量区别及用法,结合实例形式分析了Python全局变量与局部变量的定义、常见用法、区别及相关操作注意事项,需要...

    n_laomomo9372021-03-31
  • Pythonpython实现sm2和sm4国密(国家商用密码)算法的示例

    python实现sm2和sm4国密(国家商用密码)算法的示例

    这篇文章主要介绍了python实现sm2和sm4国密(国家商用密码)算法的示例,帮助大家使用python加密文件,感兴趣的朋友可以了解下 ...

    小小咸鱼YwY5342020-09-26
  • PythonPython学习之函数 def

    Python学习之函数 def

    这篇文章主要介绍了Python的函数 def,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一...

    小瑀19874272022-02-21