|
第一步:使用anaconda安装carray库:
% Q: t+ e. c/ C" ?' Y- q7 I7 P- a8 B& k3 H; U* o* h& F& Z& }
conda install xarray$ D2 M! }2 ?8 u S+ |
|5 w& k: r; d3 z) C; h; r第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - 6 h4 `1 Z4 V3 o" K
- 1 A( s; t$ @0 H1 n" `* W
- 1 y2 d, B9 ^. r% O) ^* D( K
; \& K# a4 d/ B: C% j+ [
$ W# K( U9 I* f3 V7 Z. ]% R+ F+ a% l- P& B. z: Q
import xarray as xr#step1 read dataf_tas = xr.open_dataset('tas_Amon_BCC-CSM2-MR_historical_r1i1p1f1_gn_185001-201412.nc', decode_times=False)#step2 look at data's informationprint(f_tas)
" R3 W; W+ x; L, v
- l, z$ d( j+ J [8 ?' i文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 ; |, J, L5 O! X% @! Z! [
第三步代码如下: $ }' Y7 [. x; r" o/ N z3 d0 l
- ( C7 d% m; g( }2 |
/ q8 `4 l, O0 B1 D+ X, C# U
, k! `' c7 p* C2 c- l+ F- 7 v4 h. \! H! ^# W# g4 O/ b
- : q3 ?. J4 W; ?3 W! B4 e1 }3 Y
- % @. D2 z1 m8 ~1 w* I
- , S3 h! R3 E4 q e: `8 g
, L J& S1 w# [, Y: c& V E- % @( n# M, F3 P
5 G0 |2 f7 S. X8 W6 B- C( m5 g/ x
#step3tas = f_tas['tas']print(tas)#step4a = tas.loc[15.5:74.5]print(a)#tep5b = tas.loc[15.5:74.5, 40:55, 115:135]print(b)
; m5 S( _) u9 O. d + ^$ l/ o1 ~* S' d" L! Y. L
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
: g+ U# ^% ]6 |' d8 t: N
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
# P% N2 p6 t! H" ~4 l. }. [
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
+ G% v) e) Q" B/ P7 K+ X* H; b在这里,我选取了40°N-55°N,115°E-135°E范围的数据
, J) u G7 H3 v0 v% R
完整代码 * T! _7 W1 E8 _, |) |
' I- m/ s+ k6 F, ]
% a ?% j2 Z5 C8 }0 v( z3 `3 G- $ d" u6 Y" Y; ?% S$ ^1 }
" ]7 u$ N% n5 P: P
/ W! \/ U! F1 r1 E- ' X; O% R% A& Q
/ Y' c! t/ O6 [( F. i4 t- % f! O) \+ `4 I' ^0 h
- $ X4 r. e4 a: o
- . {" @4 v0 a% |1 j3 i: m
- 6 ~2 {$ f; P3 d8 ?0 {* x8 r
: ^! `2 B& s% O" ]+ q# }
7 |$ F. w! K" v- - I* o; d4 x+ a6 L7 {# z, m
- - ]% [, F" J+ Y4 x
* t( Q* O5 C! P: J# H* O- % t* w2 }4 {! F" k# M1 c
9 c# L/ C, V3 s; @
$ Y' W7 U3 Y+ V$ I, n# L
import xarray as xr#step1 read dataf_tas = xr.open_dataset('tas_Amon_BCC-CSM2-MR_historical_r1i1p1f1_gn_185001-201412.nc', decode_times=False)#step2 look at data's informationprint(f_tas)#step3tas = f_tas['tas']print(tas)#step4a = tas.loc[15.5:74.5]print(a)#tep5b = tas.loc[15.5:74.5, 40:55, 115:135]print(b) 3 z8 _! c+ E8 D% \; V6 g2 _
|