|
第一步:使用anaconda安装carray库: - . s1 A" J: O [ z9 b
j& N |% L2 K5 E
conda install xarray
3 l% @4 J* `$ _3 L # o: U; r1 r2 I! B
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - $ y" u& X9 t8 ]9 o2 c7 Q
- 5 P9 S, s: z* a% l5 o8 n1 t, z( E. }
- 6 Q+ e/ I7 T2 d
- ' e. `+ x+ Y9 z: B, s
- 0 S) J G2 t% m n# j! d
# R2 j, v0 ~! ^
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& e0 ^0 K+ O9 i8 x$ Q4 j f% |
; V- m1 {! B8 a0 c! X/ Q. i) q: Q文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 + v% i1 |$ t- }+ U5 o7 ^; W: _& |
第三步代码如下:
0 G: P1 L; x. X1 G$ i/ F1 d* _9 Y8 j
1 J; E$ p: f- t4 Q0 P5 s
2 G3 l2 R% @; g, }7 W- ! A1 w' E; o) s* A) A% b- o
- # Z8 b' t8 T5 A4 |- ~
, q' O8 Q3 g" V- ~; {# F- $ J' m# y' A3 y' w' V' @
, X+ ]5 I+ k* j- I J! g4 v) v1 h
* O; i0 S% X! ?4 g/ Y
$ k+ Q+ O4 F9 S" h- ^) N1 j& G. T I2 N L7 r4 @
#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)* z1 p8 A8 ^& g8 u+ T# f
% S. r2 F+ R( Z4 p2 a第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
2 v& D$ b) F* @* B
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
% [% r- T$ p0 _
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。1 d: h: \' q/ }
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
0 M, I4 _7 R2 u9 { ^1 M/ W( i P
完整代码 1 S# m1 l7 C& t7 F& Q7 g2 ^3 b* |
- , ]4 G. n n3 k4 A
" I. p! w) a% |; C; P
0 R0 g, J7 w' _, R) h! G
. `3 ~ E# L9 @" c7 E2 e8 C j
" ^' @7 _- R$ U1 F- 1 ~) ~$ `. R% R
- 4 r1 n. z; D, E2 I7 o
9 p* Q. c9 ~+ Z9 a* [- % W H* J. m# m$ q& h; L5 W3 N
- , E5 p* |6 y" f& x
* \( W6 q+ Y# G0 u" W- , j* Q; c' t7 k
- ! E0 a9 d Z# z# Q8 A# L) Y' |5 W/ y
- ; O6 N( C5 Y! j5 ?: Z6 A
- , u t1 U- L3 v; o* I
- 0 X1 d; s. J& c1 C3 M
- 1 G' {# @3 d/ m* l: n. K3 B6 K
- * o: G6 o% W, P1 ?; [
: K w1 s- ~% g& ?7 W4 C3 {, N" p
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)
- h! I% P6 g' N% K$ [ |