|
第一步:使用anaconda安装carray库: - % u/ a2 Z& w' @8 a
" l2 `7 P5 @$ ?2 g2 ]
conda install xarray. Y. L. U2 E Q, d
: N& u; S8 L( \& d
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - ) x8 j: h# f: K) ?* `( ]% n
- e/ f6 m9 }2 I$ B* u3 K4 @2 j
- ( v3 e* f1 [7 r/ F) z5 n
% x. m B% S3 O8 r$ P, [+ p
& O3 m3 r" S- t' I2 s, ^& o
* n1 \& u: I6 H% a
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)* L7 q* B0 q) o
+ h3 v* \1 g3 J+ a% Q: S9 {3 L! `# m* \文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
O" ^9 v! [3 ]- `: I, K7 v第三步代码如下:
0 \" E2 k* Y/ x1 j5 w- 0 C1 Q& Q" R: [9 r. S0 M
- ^. U Z9 ?$ V" m' {* Q% P
- % @2 K/ X6 Y8 K$ ?7 o, W
& n; K" A% r4 z6 h" Q- 5 E8 m0 O5 p7 r, t9 i+ e
- u7 m- D/ v- t5 I; i }: ?
- + J- Y. n- r% y( ^* C
5 k7 ] b/ e; _/ I+ R2 \
% l- P$ X# E0 Q2 @8 O5 b/ u! W8 o7 ?8 _6 M
#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)7 ]9 ]+ I p% I$ N, m
: }( _0 x( Z2 A. b# r
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
/ j1 G# B y6 ?0 [+ F: M
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
. K& K) j8 \/ ?2 p
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。; B m7 _, P1 A8 q1 Q7 A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
1 @( ^( L: G+ N( ?9 t
完整代码 : |7 M. a3 K& x) h
& c0 G0 i$ E8 N8 h) z7 q5 Q) z
9 Y8 ]) Z6 N, h' C9 ?' K
8 B/ n) V6 f& d8 V- o7 U- / D8 Y. l5 }( Q. w9 g
- 6 c B+ |3 h2 B
- 6 [' W" B) [) `% t0 F+ c! o
- 8 g3 x% f0 \3 u0 c! ?6 H& b- A
- 0 N; @8 Y, r9 L" F: c+ ?
; }" P& O V6 ]1 I; T2 }: L- & W, |! V+ Q) J/ O
- $ {' Y% M4 M" ^0 L' c6 r
( V$ s, w; s& }' h5 k/ w- : Q& S# t5 Y0 c+ G- V
; l- R5 ^) n6 D/ b- N1 x- ( x8 @# a9 W2 z$ O! K
3 k. T. `" s, u( r" s6 C2 K; Z- 4 O5 N* U+ |* y V% e: Z
( T5 Z S) d8 w$ q! Q% }& q: |( d6 o8 D! X/ x; C9 `: r) g
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)
; C! q$ E; A+ B6 f" b |