使用Python读取nc数据
在地学领域,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())
dataset = nc.Dataset(file)
: 使用 netCDF4 的 Dataset 方法读取文件,并把netCDF4文件对象赋值给变量 dataset 。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])
dataset.variables[name]
: 获取数据集中对应的变量。print(dataset.variables[name])
: 查看变量相关的属性信息- 通常情况下nc文件中每个变量都会封装其属性,一般会包括全名(long_name),单位(units)等等。
- 除了全名、单位等常规信息,变量属性中还有几个需要注意的信息:
- 变量的类型和维度信息 : 输出字符串的第二行显示了变量的类型和维度信息,如
float32 BC(LAT, LON)
表示变量 BC 数据类型为 float32 ,数据是一个二维数组,维度顺序依次是 纬度 LAT 、经度 LON 。 - missing_value : 缺省值,一般都是一个非常大的数字或者非常小的数字,这个数字在正常数据中是不可能出现的。在对数据的处理过程中要考虑和重视缺省值,否则你最后可能会处理处虚假的结果
- add_offset、scale_factor : 这两个参数为解包参数,用于在存储时对数据进行打包,在实际使用的时候再通过解包算法将其还原为真实值。解包算法为
真实值 = 打包值 * scale_factor + add_offset
。如果你遇到一个nc文件,读出来的数据很奇怪(很整齐的整数、不合理的数据范围),或者解包参数不为默认值,则需要进行解包处理。
- 变量的类型和维度信息 : 输出字符串的第二行显示了变量的类型和维度信息,如
dataset.variables[name][index]
: 获取所需属性property对应索引位置index的属性值,如dataset.variables['LON'][:]
获取所有的经度数据,dataset.variables['BC'][1000][500]
获取 BC 变量中第1000行第500列对应的数据
本文参考:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库