|
第一步:使用anaconda安装carray库: - : N; Q* L" H& ?8 \7 j# w
0 s( \/ V/ o" Z5 q
conda install xarray
6 R4 q- N4 c0 x/ M$ z , O/ b- l+ o0 F1 Y8 K8 a% F
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
8 \- ~# L" [ F% u- r }1 V# d3 p5 d
5 g' U; w9 @% f/ s" d% `7 A
7 s: k' _0 F6 a7 ~
& ^0 q2 m1 V. N9 u
$ E4 C& R' z% i/ ]6 \- }8 m) P6 F& U9 P
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)0 _) r" F! D* p% O9 J& Q2 \% Q
4 {$ m% t* W/ t' Y) c) S
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
- D7 `* \( }5 [8 e" V; Q& U1 y第三步代码如下:
# g. Y N7 S- `
/ W3 R9 j/ v; _/ V- E
: k; i. g/ A. a- # c; t" R1 k2 Q# d+ \
- * {* @+ `5 M, c p# E4 {2 W. w+ v
5 w$ R: p) W! N- 0 H( @% V# m2 D3 }
- 0 S' A) v3 H( I) r* K1 Y) r0 _
- 7 U" L5 @: N& k7 q: o" P \
; ]1 V! d4 Y7 U% j Z7 m4 Y2 n# F/ r, |
#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) z8 |6 h0 f5 K% y
+ Z4 J6 Y: [6 E3 f0 ^ G
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
) U5 _& U- k3 d9 S
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
1 f0 H3 z5 ^1 s, x9 Z! d
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
1 }+ P0 {1 m0 G& U在这里,我选取了40°N-55°N,115°E-135°E范围的数据
; K5 [+ M/ ^. ~' ~) Q! H% F2 u- w2 ?
完整代码 ) N1 r$ O5 e6 P" `& {
- 6 ?9 m. \/ j2 J' s; N
- ( B7 G7 u6 A9 j8 \% z
' |+ e8 N! w3 \" y* h: d* f: A- 0 t, Q. c' v1 e+ r. ?, Z
; [( H, \( i f3 _; X3 o+ @- , |4 r" f: v/ T. p; D2 Z9 B
- ; t5 H4 G6 R. b- g
& i9 v% r1 d8 @/ E5 H- $ U8 |3 |" H; T: ?
- $ A( N3 e6 }, u% G6 C5 i
- ) I7 r% B' Q9 D, _5 q& a9 E
- $ P2 W$ A: A' I9 [5 V! N
- 3 `, n* H/ `$ \4 u( n; b2 N4 c$ ^
# }. D/ h9 k2 N3 t& L. K. K- 1 u; k( G" V: N5 o9 B8 u
- 1 q0 U2 B- h3 L" i" ~
- - t4 _/ C! E+ y# X
/ U8 e) P$ i+ j, `$ w' m1 P7 s) [/ v7 E0 f, n. f, h( c
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) * c6 j) U. a7 t2 ] N
|