|
第一步:使用anaconda安装carray库:
7 l! i" S+ B+ Z; I% b2 T' r& `' Z5 F) n+ X- `, e0 S) p4 ~1 {
conda install xarray
6 R" K4 H& U; Z: u8 K " T3 C1 J w. k+ K0 _" f
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
: T$ P3 t$ U' m' G, r: I6 I3 g6 C- 7 |8 {0 H/ F) |
& A2 _2 c$ `6 a" F# u. q- 3 B4 a% L9 z3 {! r, g, T& E
- 7 p, W A5 n' _! ^! ?
1 [1 q% P# C1 \' z6 b! @8 s
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)& }5 r0 a7 M1 H! }, w T; c( U
! o6 M% U+ k" ~9 J! W. _文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
% j2 |8 i" E# ^% |3 i第三步代码如下:
6 g( @# i, k9 l) n6 z5 H
+ r& [6 H/ d+ A/ K2 Z' L
2 a, a* s M. s |* V
5 J8 [5 V/ }+ a8 H2 U- $ e3 ~/ f8 I6 I8 t- F4 c
! g& ?' m* i7 z% ?3 X1 A
. d d% U0 u6 A5 o" K7 E- $ R& s, o% j1 f! ]6 g, L
. T6 ^8 Q9 A; H
4 x. c1 ?7 b3 k# ~1 I
) N( h! h" X/ c2 i8 `/ A0 {
#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)) H$ g* I1 K5 J
8 i0 V- O) C. k. |+ W6 B' J第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
) F/ W) S6 p3 }, ]
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
) K1 a5 |0 R, j/ Z" s1 \1 s \+ m( P
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
2 G5 \% Y2 `) Q+ P9 h! M在这里,我选取了40°N-55°N,115°E-135°E范围的数据
$ f2 H6 y4 f) N/ ^完整代码
5 s% {2 j) G2 |! x+ R2 K3 {/ `
' ?4 L2 Y) d2 D/ J9 }- [& M# Z
7 u3 l4 V5 R6 r) q7 W
/ k& U" M! E& T6 t( o- 7 V6 O2 L0 p+ w2 w, J
: Z, }8 F, u# m+ |4 E: U4 N- \- G6 ]7 V5 J' O1 D
- ) _+ u; \. M+ X
- * _) W- e9 n0 E8 l; I+ ?5 ^. F8 c6 S
6 q8 P) S( L7 k) I; d' e
5 L7 S1 p. w, A( x' |
6 D5 l) R6 S' L2 |( X2 q! x( I
$ z. h4 b6 J( w8 P1 [: o$ u) k- 8 Z1 e$ c: [- R: D6 h- i$ J/ S
- * P' H. w ^8 n, a" i6 L& t
- 7 w) W0 A' m4 H+ O
- - p8 b: s+ M0 ~0 u
- # R& [, d; k: w! M* H5 d/ M
/ x7 p. N R& P+ t9 U( w4 ^8 ~) Z
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)
" m0 E" m! k1 j d+ ~ |