1卵酪、NetCDF文件(***.nc)
python很多庫(kù)支持了對(duì)nc格式文件的讀取隶校,比如NetCDF4抢腐,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。
我最初使用PyNio,但是由于NCL到Python的移植并不完全烧给,導(dǎo)致目前遠(yuǎn)不如直接使用NCL方便,而在接觸Xarray庫(kù)后喝噪,發(fā)現(xiàn)其功能強(qiáng)大遠(yuǎn)超NCL(也可能是我NCL太菜的原因)础嫡。
安裝同其它庫(kù)一致:
conda install xarray
我這里以一套中國(guó)逐日最高溫度格點(diǎn)資料(CN05.1)為例,其水平精度為0.5°X0.5°酝惧。
import xarray as xr
f_tmax = xr.open_dataset('CN05.1_Tmax_1961_2017_daily_05x05.nc')
可以看到榴鼎,文件的坐標(biāo)有時(shí)間, 經(jīng)度晚唇,緯度巫财,變量有日最高溫
我們將最高溫?cái)?shù)據(jù)取出
tmax = f_tmax['tmax']
這與Linux系統(tǒng)中的ncl_filedump指令看到的信息是類(lèi)似的
Xarray在讀取坐標(biāo)信息時(shí),自動(dòng)將時(shí)間坐標(biāo)讀取為了datetime64 格式哩陕,這對(duì)我們挑選目的時(shí)間十分方便平项。Xarray通常與pandas配合使用。
比如我們想選取1979.06.01-1979.06.20時(shí)期數(shù)據(jù)萌踱,我們只需
a = tmax.loc['1979-06-01':'1979-06-20']
再比如我們想選取夏季數(shù)據(jù)時(shí)葵礼,只需
a = tmax.loc[tmax.time.dt.season=='JJA']
更多的時(shí)間操作同python的datetime函數(shù)類(lèi)似。
當(dāng)我們想選取特定經(jīng)緯度范圍(高度)的數(shù)據(jù)時(shí)并鸵,.loc[]函數(shù)同樣可以解決鸳粉。
在這里,我選取了40°N-55°N园担,115°E-135°E范圍的數(shù)據(jù)
a = tmax.loc[:,40:55,115:135]
甚至届谈,我們還可以套娃,同時(shí)疊加時(shí)間和范圍的選取
a = tmax.loc[:,40:55,115:135].loc[tmax.time.dt.season=='JJA']
這足夠滿足常用到的數(shù)據(jù)索引要求弯汰。
2艰山、TXT(CSV...)
對(duì)于這類(lèi)簡(jiǎn)單排列的.txt文件,可以通過(guò)np.load讀取咏闪,用pandas的.read_csv更為方便
data = pd.read_csv("cslist.txt",sep=',',header=None, names=['a','b','c','d','e','f','g','h','i','j','k'])
讀取txt的同時(shí)曙搬,對(duì)每列賦予了一個(gè)列名,通過(guò)data.a可以直接按列名調(diào)用相應(yīng)數(shù)據(jù)。
對(duì)于較復(fù)雜的.txt文件纵装,仍可通過(guò)該函數(shù)讀取
data1 = pd.read_csv("trajectories.txt",skiprows=5,sep='\s+',header=None)
skiprows=5跳過(guò)了前5行的文件頭征讲,sep='\s+'定義了數(shù)據(jù)間隔為空格,這里用的是正則表達(dá)橡娄。
pd.read_csv函數(shù)有很多的參數(shù)诗箍,可以處理各種復(fù)雜情況下的文本文件讀取。
3挽唉、Grib
grib文件可通過(guò)pygrib庫(kù)讀取
import pygrib
f = pygrib.open('xxx.grb')