使用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 安裝該模塊后即可。

20200929120621

nc 數據讀取

以下使用中國的顆粒物濃度數據作為樣例數據。

查看數據存儲內容

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

20200929121429

  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])

20200929130537

  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格式的氣象數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM