|
第一步:使用anaconda安装carray库:
. T# T8 Z. N' Y% S- o0 l2 u
1 A* M5 y# Z4 [: J* i( \, a
conda install xarray! D9 k. }2 b; j
2 v5 l/ Z2 }4 m第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
0 y$ s/ \% q& z$ ?9 ]
; P# [/ @. ?; V Y' |! S! `0 a7 P
% Y p2 m2 T, j' ^* n
/ p, L1 D1 B7 z8 |' K6 v9 S- - z3 n. W7 ?# ^/ S. v5 m: f
& W# [9 D5 j9 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)+ U5 ^+ |) q& u$ h1 q7 O* ^% y' n
: T3 E4 B4 a& c% O0 t5 U文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 & J* Y' x& D0 o, I6 B
第三步代码如下: * Y, O! C# p- O
* w5 T5 B' f z9 N
7 n/ H% J- P- {! Q$ p- 2 V; r7 F& `, R7 R
- 2 J7 i" }1 d( P
% o* F4 ]" j1 n% s2 ^; B4 G E S- 8 ?; D1 Z9 A$ l7 ~
% X. m# N3 @7 ~1 e* ]6 f: D- 1 `# B) p9 q! s" N j0 Y8 j8 c
- U( e0 Q; A# A( ^" t8 c8 ?
; C+ ^. C- h* J, z2 D
#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)
% ~, I5 w! x! O% Z8 \6 K " {+ P1 d$ f8 `2 G5 G
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
' C1 [# y; }; I" t @
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
z0 @0 d: T% z5 h6 H5 f
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
8 w* K2 g& K" j7 P在这里,我选取了40°N-55°N,115°E-135°E范围的数据
( d% o) d1 d* R! n
完整代码
- {! f& l5 u& o3 B- ^0 a) x$ W3 D6 g
7 W: Y% n" W- Y; m+ R
, x5 s, w1 |: k3 E: R* t- # r4 L" H1 J. T) A7 I3 D2 \6 c/ U
- / H' p! x+ Z+ {. H2 ]
- " I7 c0 ?6 `# i% M0 r4 N
" O& M' j& Q' v7 B4 ~$ J
/ b* `' @, p r' m6 S0 H+ \0 H( I& Q- & s8 p v2 N4 y k+ S$ q' ~
- # C* ~3 O0 M; t0 X: N
1 i6 g; k+ G8 t4 f0 @9 [
1 B; s0 e& P0 g
1 W7 [- m: m$ T- ) O; B% B3 v4 t; I" l
) S+ [" _7 w5 L: V4 Q! Y
' `; W" x- @' B, S$ q, c9 n- n- p; m U* y
, A, l1 T p5 {* a! O) m- 8 l6 T/ C4 D$ ]: q* w6 n2 H
, N9 Q* p8 C8 @1 R6 W# _7 I8 r
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)
3 `2 n# ]- P5 W& p |