|
第一步:使用anaconda安装carray库:
( h" C# K5 N* b. w4 j9 d5 Y& ?6 W' L. b0 Q u6 S# U8 s
conda install xarray
! \# _8 v6 m: K( R
6 ?. u5 \3 d& M6 t第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - 0 i& Z; U1 x6 f$ X
- 7 b* |" K {4 V6 T2 ?( i
- ) P' o c% H5 Z! p$ x
: C6 a% b" \% J: m' b/ X- % |- Y2 V, C1 W; i7 P
6 D' X. Z! i; w0 b( 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)4 u( l* i$ B7 ~% I
0 r* x6 o! H, o+ x. z: o文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
) P7 _$ a( F: `! z/ S第三步代码如下: : E; k6 Y* K2 m0 _1 @/ o$ s. `
8 G2 _6 C( O# t$ l& D. G- * d( O% c6 x/ u) t* E2 U3 M) R# N
" Q3 w/ \9 j" e: R' I
4 O2 U, y7 @, f; A3 P, u
- b, `) A0 X1 o; A
, z1 i, t0 @1 g0 M- ! @ C$ R' x9 g5 i& [: `! P" j% w
- & Y: o3 q, a0 e9 b' q+ [
6 [, c6 N4 y" z4 C- w% c5 s
q1 \! m# Z' i( P. G
#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)& w8 B, A1 j8 C( Q0 C8 K; Z
5 m! e+ B7 i2 Q2 B W0 e7 W5 f
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
& L9 H' j4 t' ]
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
; f% z$ L( W2 j3 q: x: c1 A% O
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。" |. R: q9 Q- ~9 h" ?' X$ A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
, P* y2 X) B6 S完整代码
, G4 P( Y P1 `) ^ s
& z6 F4 {* x$ I( E8 M, y" `" r- ) J ~+ e) w h6 L9 O9 `& D3 f
4 V9 I1 @" d+ E, z7 B
0 b0 N+ d+ ?) C; H; _4 ?5 B) M7 ?- 3 t- }* _; x! k2 h# d) A1 h8 H& `
3 H! l9 r+ v$ t8 g. i) b- 0 ~! h0 R5 f) f% j2 M A' Q
- 5 T: t+ ?! |, L- M
4 g( C. v i, `
8 W8 z6 z& E; ^- d6 m% K3 D* V+ N- ' J8 q- t# z( d7 o# V) z
/ C3 C! `4 f* W/ z$ Q+ C$ L9 F) y6 }- m Q# Y: o8 O& ^- U/ W7 V
- : h8 s2 ~6 Y& O3 \/ m8 n% M
9 g, A0 F& {% [- b: m- # h6 W3 t! O$ D4 O9 \
q q; z7 I% C6 m# S. I
1 y: N" w1 |! ?
& m/ c/ ^+ W' n
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)
& w, J: e2 y0 ?4 w; Y |