|
第一步:使用anaconda安装carray库:
; x9 g2 r/ ^- b9 K4 y
' F4 |4 u! F/ |& Q1 E
conda install xarray3 P# v! |) I# v: {( O4 i3 q$ r
. a# U ^" u9 n4 g, p
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
4 d' v, r) }: E7 u5 \( ~# a9 o
8 h' E2 X: b' H' Q, c2 @0 h
/ \7 ?/ \( z- @- ~+ {, \8 S
5 R" C* i9 }$ ?1 V' t
5 j8 B" U: p9 N& E5 {7 c. Q6 w6 Z' d
8 N, Z& @' \! g6 N* M0 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)
3 @/ L/ A: N, C; V. z8 V& p8 a 6 g4 d( Z* G: p O
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 - i- c: I/ I- B+ T
第三步代码如下: - Q1 Q8 F, ~7 T) Q- |6 F# z+ p8 L; h
- ! u/ W: o4 r1 n y
8 H3 M, j1 p" t1 K, Z4 f
9 m! I# ^2 r" p! U- Q0 j- - s; z' P) n( j* G% {5 _0 c
- & t$ u& H8 c2 x9 [ }3 y. p
! k! L& O* D. D, _5 t- , H& ?% ?+ ~/ a# \# h/ T; B
- & c2 F+ z3 x6 u5 `! F' \$ f
- 5 J- L, C7 D# m1 N: d$ s L; w
% W" ^( U% o- |- C' N# p; z
#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)
/ i4 B: o2 F" b6 V# N& n0 Q% d
1 j9 l; V% e: g0 Y9 K: |& M- h* E第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
. l+ z" [/ U% g" W- R
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
: |3 n. ?/ f1 n9 {, h- u- c n
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。! K+ E- O3 C/ W; ]# R/ u
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
1 i C# h7 l) ^* F" N完整代码
5 A" i$ F8 \1 f5 N+ |) h
; w D, N5 ]; s: m
; t( O" H% {* M8 X0 y# y9 c' @
* I. B) }8 T+ i' g- `$ W q. _
& m2 B7 S& f6 H- A, g
# d! }3 \1 Z, l! a1 V
6 E$ _: A4 e" ?2 A* }- / q$ J# n A H0 W3 g
1 |+ h! ]0 V9 M B& l+ e- Y- P) ?- " z) H4 ?! y! w. Z- N# ?
2 q. f# W4 j# Y, n9 f( _- , q1 G, A# W, j
- / n: k: s4 v. s/ c
) C- R8 E: |0 T- 1 z. C7 J. Y+ |' R' o
9 x' f4 _* m9 p. H; t& V8 `8 V* o- ; S! x6 P' H$ r/ H/ W2 \) |; T
9 w! R: R! y+ W+ S. S
3 y5 N6 O0 ^9 o. @. F; e2 V
6 w2 J+ b' b- v' W$ Z5 R1 |
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 \1 @, k" N$ m
|