第一步:使用anaconda安装carray库:
% f5 w9 @6 {8 u$ I
V* e9 `0 x; F& G/ P5 j
conda install xarray
) y* ~( V3 t3 P' r- R' j) `1 k
2 g- E6 }1 a8 _$ l# P# I3 r+ f. l第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
! N9 U1 v2 y4 u9 ]- 8 n& M" e9 g8 C) G
5 h5 x* { N4 W! y: w
$ l3 p0 J6 E9 r5 \! l- X5 J, k
3 \. p$ F3 H- o
8 k# g$ A, D# F
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)7 q6 c8 X* n( @, A1 I
7 u, {3 l; ~) s9 W2 [, Z/ [. y文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 $ n+ p" X4 i0 @8 ~) n- C8 `! @ C
第三步代码如下: K7 r+ f/ }" u( b6 H
- $ T3 v' B/ f$ |2 a5 N+ P( W! D
3 | s. u9 p; f1 |- k2 \- ( F P2 h0 @+ P- ]4 \: ~
( l: H5 G \, U5 U- , x5 E2 T" p0 c- g0 g
- * y( i) E$ L' v! o
+ r( k* s9 s# o- 5 c A0 d- V- K7 J
- 7 F2 l8 l$ g5 e d, H' _& t: r
" @6 K# m; C4 r6 i; e7 W1 h0 o& p
#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)4 C& G, n& X- l
, j8 V$ g. i" \& v7 l
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
$ A1 w% q2 F5 B) W0 A4 k
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
) k$ w. C( _: |' N2 V, a% {
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
$ J5 i9 X( ]' t在这里,我选取了40°N-55°N,115°E-135°E范围的数据
# o5 a" e& D- y u0 Y ]完整代码 4 s) f5 p4 A. B, ~
- ; u- }. _6 R& }$ Q
& Z9 h" A6 y. u- T K3 ~3 C
, `$ _3 a4 `- k/ O
8 l( o+ r$ s+ n; K3 v6 D
$ ?4 R8 }2 ^4 p' k9 T+ i* R5 l- m p B4 E2 E# G. b, R
g d4 Z2 \. F) ?6 U
1 B% U& J7 a x: ~5 T) R0 Y4 I- ' D' f! s3 _$ o( m k! X' M
- 9 e4 |7 r* Z7 C- G9 Q( k3 D1 E* B
* t1 t2 w! |5 f
$ b) O( U- y% R' P0 V7 u! N4 N& O7 Y$ W
P* f5 F9 H, @- r$ h0 n- 3 S% g& u0 J3 h+ A
7 `$ _! e' D5 ~& C( ]: I6 D! K- 1 N8 b: c) P6 @* q2 h( h
% F* \/ v7 p2 f; j3 B2 W+ J- / t. F2 k& T/ g; V, ]! e
* r3 B) U) K7 S0 [7 `( m1 L" P0 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)#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)
8 l h4 p) H4 y7 P% n- k8 Q7 O |