第一步:使用anaconda安装carray库:
/ R1 l: |5 o$ U! w+ G' X7 T3 J- g: L1 R; B8 F0 c
conda install xarray
% M5 x& H- g. U5 E4 U% @- G
3 D$ z6 t8 Q) ~3 o i1 U第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
' E! T S+ P, O. d# x+ x& c
9 o6 y! |; q# ~
& j( Y2 S0 w# f; ^/ ^9 L$ t& F$ n! }
( ]4 R5 K5 A) m! ?! E- M. Q! e- D3 x
0 t! L6 H# x. _) s
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)! G9 b( G3 o' c' Z
2 G$ n% a: z& j) b0 S# \
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 5 b7 a! g% Y1 L: L1 Y% }
第三步代码如下: % a5 @! e3 w: q6 m2 c ?+ q/ Q; f
( q. J# h" p1 d/ z8 `. s. N% f
9 W/ v9 N$ N K9 B8 u- % i% ?/ w7 f) v$ G- r' v; d! `
- o# B6 Y6 _/ Z+ S/ P. @
7 Y: y! K# P+ ?9 x, F5 h* a
. w1 B5 j' _3 V, J' ~
, q+ v* M5 p4 h8 L8 G: R
( ^5 F0 d4 ?4 }' p9 b, i- 7 l5 A- D! R+ L; {
1 m! ?. e& q1 C6 W0 v9 ]
#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) V2 d7 z2 N) X5 L
; g3 Q% Z; T" n' C0 S
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
+ @% N/ q! j8 g4 i' ~% L) T8 ?3 O* S
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
3 o) T) r/ I1 T
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。, \& ~8 O' n' A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
. L' h9 m- ~5 b" e2 ^- K/ u. r+ v
完整代码 ! t' j ?# E0 J$ L2 b# y/ \ t
- : O8 Z# p. q0 R( C9 ^; _7 ~
. u' \5 Z1 C$ t* {* H- 9 s" O, p+ f; u" _3 j4 H+ D5 X
$ G* T& V/ E( L! Q: R4 i; c
# E0 ]8 }% L0 H# [/ S
' ~( w3 V( v" z7 T3 i& `# X- - [8 r+ m! H5 q* V
7 S0 |; ~% a1 j/ O3 V- $ }, ?6 y! d+ y, {
- 2 z$ t @% l; G4 G! b% t4 ~. r
: V; I" e/ E2 g2 K1 T+ L/ C5 z% H. D- $ s& I1 x1 a k' G: Z
- % W/ `! G2 W1 V# ?$ c6 `
- 8 { \0 |' d' ?( a! T- P0 b* Q
1 f. m: X- p# E* `- ?. a( `
% \# J8 R3 w/ |0 R) B0 E3 b4 p- 6 J! c4 A6 D9 G+ S% T0 l
( Q" f8 P% `( F2 A x# ?( w+ W2 R& D- n6 w# d+ t
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)
+ @9 o& B- R# i. L+ R5 U |