在地学领域,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. [转帖]Linux系统中的Page cache和Buffer cache

    Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...

  2. [转帖]Linux中的用户和用户组

    https://www.jianshu.com/p/76700505cac4 1,Linux中的用户分类 超级用户:拥有对系统的最高管理权限,默认是root用户. 普通用户:只能对自己目录下的文件进行 ...

  3. Sysbench简单测试数据库性能

    摘要 先进行了一个PG数据库的测试. Mysql数据库的测试稍后跟上. 紧接着上一篇的安装, 部分文件可能需要特定路径才可以. sysbench 测试的说明 一个参数 这里稍微说一下参数的问题 sys ...

  4. 简单进行Springboot Beans归属模块单元的统计分析方法

    简单进行Springboot Beans归属模块单元的统计分析方法 背景 基于Springboot的产品变的复杂之后 启动速度会越来越慢. 公司同事得出一个结论. beans 数量过多会导致启动速度逐 ...

  5. React中Props的详细使用和props的校验

    props中的children属性 组件标签只用有子节点的时候,props就会有该属性; children的属性跟props一样的,值可以是任意值;(文本,React元素,组件,函数) 组件: < ...

  6. hadoop实践02---eclipse操作hdfs的api上传文件

    1.eclipse中编写代码后双击main方法--->Run as ---> java application ,然后指定的文件 就会提交到hdfs中. 2.查看文件:http://192 ...

  7. ILRuntime性能测试

    我们公司有一个Unity原生开发语言C#写的项目,目前已经在安卓测试过多次,上架IOS在考虑热更,所以对ILRuntim进行性能测试,在测试过程中已经按照官方文档进行了CLR绑定和生成Release的 ...

  8. 从零开始配置vim(31)——git 配置

    很抱歉又拖更了这么久了,在这个新公司我想快速度过试用期,所以大部分的精力主要花在日常工作上面.但是这个系列还是得更新下去,平时只能抽有限的业余时间来准备.这就导致我写这些文章就慢了一些. 废话不多说, ...

  9. 从零开始配置vim(27)——代码片段

    我们之前介绍过缩写相关的内容,缩写是可以自动帮我们将缩写的单词展开成一段完整的话.但是代码本身是结构话的,仅仅使用缩写来配置是无法完成自动生成代码这个步骤的.好在我们大量的插件来进行配置.本篇我们将要 ...

  10. Couldn't launch Python exit code 9009

    Couldn't launch Python exit code 9009 start stable-diffusion-webui,发现,python 环境没有,我本地其实是已经安装完毕的,后来发现 ...