在地学领域,nc 格式的文件可谓随处可见,这种文件可以存储多维数字矩阵,同时又封装了自描述信息(例如经纬度、高度层、时间戳、单位等),因此使用起来十分方便,不用担心数据和描述信息分离而导致数据不可用。Python、 NCL 、 Matlab 等都可以对其进行读写操作。以下尝试使用 Python 对 nc 文件进行读取操作。

安装netCDF4模块包

要用 Python 读取 nc 文件最常用的是netCDF4模块,需要先安装该模块才能使用。

安装该模块最方便的方法是使用 conda ,在命令行中输入conda install netCDF4进行安装即可。

ImportError: DLL load failed while importing _netCDF4: 找不到指定的程序

如果安装 netCDF4 完成后,在 python 中使用import netCDF4提示ImportError: DLL load failed while importing _netCDF4: 找不到指定的程序。,则大概率 netCDF4 已经安装,但是该模块的一些依赖库安装不正确。在命令行中使用conda search netCDF4 --info查看 netCDF4 的依赖。如下图所示, netCDF4 依赖于 hdf5 模块,使用 conda install hdf5 安装该模块后即可。

nc 数据读取

以下使用中国的颗粒物浓度数据作为样例数据。

查看数据存储内容

import netCDF4 as nc
file = 'data_dir/sample.nc'
dataset = nc.Dataset(file)
print(dataset.variables.keys())

  1. dataset = nc.Dataset(file) : 使用 netCDF4 的 Dataset 方法读取文件,并把netCDF4文件对象赋值给变量 dataset 。
  2. dataset.variables.keys() : 查看数据集中所有的属性,此处可以看到数据包括经度、纬度和颗粒物浓度三个属性

查看具体属性值

import netCDF4 as nc
file = 'data_dir/sample.nc'
dataset =nc.Dataset(file)
BC=dataset.variables['BC']
print(BC)
print(dataset.variables['LON'][:])
print(BC[1000][1000])

  1. dataset.variables[name] : 获取数据集中对应的变量。
  2. print(dataset.variables[name]) : 查看变量相关的属性信息
    1. 通常情况下nc文件中每个变量都会封装其属性,一般会包括全名(long_name),单位(units)等等。
    2. 除了全名、单位等常规信息,变量属性中还有几个需要注意的信息:
      1. 变量的类型和维度信息 : 输出字符串的第二行显示了变量的类型和维度信息,如 float32 BC(LAT, LON) 表示变量 BC 数据类型为 float32 ,数据是一个二维数组,维度顺序依次是 纬度 LAT 、经度 LON 。
      2. missing_value : 缺省值,一般都是一个非常大的数字或者非常小的数字,这个数字在正常数据中是不可能出现的。在对数据的处理过程中要考虑和重视缺省值,否则你最后可能会处理处虚假的结果
      3. add_offset、scale_factor : 这两个参数为解包参数,用于在存储时对数据进行打包,在实际使用的时候再通过解包算法将其还原为真实值。解包算法为 真实值 = 打包值 * scale_factor + add_offset 。如果你遇到一个nc文件,读出来的数据很奇怪(很整齐的整数、不合理的数据范围),或者解包参数不为默认值,则需要进行解包处理。
  3. dataset.variables[name][index] : 获取所需属性property对应索引位置index的属性值,如 dataset.variables['LON'][:] 获取所有的经度数据, dataset.variables['BC'][1000][500] 获取 BC 变量中第1000行第500列对应的数据

本文参考:

  1. Python读取nc文件的入门级操作
  2. python netcdf4读取nc格式的气象数据

使用Python读取nc数据的更多相关文章

  1. 使用 python 处理 nc 数据

    前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...

  2. Windows下Python读取GRIB数据

    之前写了一篇<基于Python的GRIB数据可视化>的文章,好多博友在评论里问我Windows系统下如何读取GRIB数据,在这里我做一下说明. 一.在Windows下Python为什么无法 ...

  3. Python读取JSON数据,并解决字符集不匹配问题

    今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...

  4. python 读取excel数据并将测试结果填入Excel

    python 读取excel数据并将测试结果填入Excel 读取一个Excel中的一条数据用例,请求接口,然后返回结果并反填到excel中.过程中会生成请求回来的文本,当然还会生成一个xml文件.具体 ...

  5. Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  6. python——读取MATLAB数据文件 *.mat

    鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题.以下代码可以解决python读取.mat文件的问题.主要使用sicpy.io即可 ...

  7. 利用Python读取外部数据文件

      不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素.利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析.数 ...

  8. python 读取二进制数据到可变缓冲区中

    想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...

  9. Python读取文件数据

    1题目要求: 文本文件有这些数据,需要的只有其中的5个属性,如下颜色标记 像以下的数据达到75万组: 1product/productId: B0000UIXZ4 2product/title: Ti ...

  10. Python读取excel 数据

    1.安装xlrd 2.官网 通过官网来查看如何使用python读取Excel,python excel官网: http://www.python-excel.org/ 实例: (1)Excel内容 把 ...

随机推荐

  1. [转帖]Debian9换源(阿里源)(Linux子系统)

    http://www.taodudu.cc/news/show-5410026.html?action=onClick 默认你已经装好Linux子系统. Step 0: 换源核心就是把/etc/apt ...

  2. [转帖]Nginx-https证书认证详解

    https://developer.aliyun.com/article/885650?spm=a2c6h.24874632.expert-profile.306.7c46cfe9h5DxWK 简介: ...

  3. 改变promise状态有三种resolve、reject、throw

    let p = new Promise((resolve, reject) => { // 改变Promise的状态由三种 // resolve('第一种成功1'); // reject('第一 ...

  4. 2.4 Windows驱动开发:内核字符串拷贝与比较

    在上一篇文章<内核字符串转换方法>中简单介绍了内核是如何使用字符串以及字符串之间的转换方法,本章将继续探索字符串的拷贝与比较,与应用层不同内核字符串拷贝与比较也需要使用内核专用的API函数 ...

  5. 20.6 OpenSSL 套接字分发RSA公钥

    通过上一节的学习读者应该能够更好的理解RSA加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公 ...

  6. C/C++中的可变参数和可变参数模板

    目录 1.说明 2.C语言中的可变参数 3.C++中的可变参数模板 2.1.使用递归的方式遍历 2.2.使用非递归的方式遍历 1.说明 不谈官方定义,就从个人理解上说,可变参数 就是函数传参的时候,不 ...

  7. 我的微软 MVP 之路

    目录 微软 MVP 大礼包 我的社区经历 如何成为微软 MVP 微软 MVP 权益 总结 微软 MVP 大礼包 今天,我收到了飘洋过海的微软 MVP 大礼包,内心无比激动,礼包内包含了一座水晶奖杯,一 ...

  8. Windows-Xshell对多个终端同时执行命令(发送命令到多个会话)

    方法1:使用查看中的撰(zhuàn)写栏 (1).查看→撰写→撰写栏. (2).底部可以看到"撰写栏",选择全部会话. (3).在撰写栏输入命令,回车后就会发送到所有会话窗口. 方 ...

  9. Python-字符串format方法指定参数

    一.字符串的format方法有几种指定参数的方式:(1)按照位置传参(默认方式),传入的参数与{}一一对应(2)关键字传参,关键字(keyword)传递是根据每个参数的名字传递参数.关键字并不用遵守位 ...

  10. MyBatis踩坑之单字符条件比较

    背景 Mybatis中可以使用 <choose><when>...</when></choose> 语句来实现条件选择,<when> 标签含 ...