|
第一步:使用anaconda安装carray库: - 6 D. I! [# E( K9 O7 z! ?$ t
* a4 `0 e) Y- a1 ~ l) P
conda install xarray4 p9 u" `1 V, B1 \' `
! G3 ~; R2 F; B+ g
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
( y2 A$ q) I! ? S6 {% n& q5 I
& i/ W' L, o+ p2 J( P+ r+ D- & `! }: H% T6 ~7 z( I
- 9 F$ J! ^, i7 G! E, { n
( J/ ?0 y4 T0 f% s n0 @6 d% a4 q
" O& y4 L6 m9 v+ 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)$ }' P! ~) y% U$ H
8 d2 L+ |% d& B文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 7 q, J1 a: j) l- g
第三步代码如下: / t+ a; f* D# p
9 b, m& t9 K" v8 b) T- 5 `9 [( `4 a" M" B! a! m' j0 Q% V
% X: b6 O: L2 a4 ]
+ C+ A4 n3 `; c9 m; j9 u- 6 C4 o* I, o) N& f& o8 H
- ! a+ v& {8 K! D( E- r5 X( l0 { _
- . Y/ ~( z3 ~7 P
- 5 H% s" z0 P4 z, R5 Z
. w: b/ I. m9 f9 u$ H. j$ V/ }$ K7 l; \5 T0 r8 j) z: p2 V
#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 G+ B {4 o) Q/ H+ \9 t : F* S) a6 o' _' E! t7 V
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
9 m* O" ~2 l+ Y5 E
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
2 v+ K; w! p; @
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
+ s& |3 C+ o' U7 ~在这里,我选取了40°N-55°N,115°E-135°E范围的数据
- ~ }1 k# C; x7 q( N
完整代码
8 N4 g% E% L9 c
+ A2 _- J- l7 H' u# H- 7 s5 S- v/ W# x+ v: S
- . j9 s) I( Z0 q6 _. T$ c
9 {0 G0 I& X. {/ i; ]) P* l+ B% n
: C. R, E* y# k X) l4 s
$ z- | i+ N: }3 g: u- 3 q* J7 l' Z% M+ S4 ^: K9 F2 F3 m
- ' S+ q) ~' I0 x% T l i
, C- i; ]3 M& C& ?, |
% w, E* ?9 E" A N2 d2 F
! `4 a4 i9 t; I" i
. G# ]7 z( ]" r+ H, {% O E- & t' q+ J) |6 W9 k+ t0 L
- , F9 F& d# ]; v' v3 d: P/ v5 v( u
! b" q' G# a2 o, e: |# k6 d
" g, z2 U# i9 u# I4 Q. ^' ^1 F- ( e4 B0 D. x" j. i; |6 J
3 M1 Z+ O5 H5 }$ P1 j, G' Y3 F# n+ S( n+ B1 C' g7 s- ^/ s; E
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)
4 B( W" S+ O7 v |