|
第一步:使用anaconda安装carray库:
$ a; g4 X9 _! v, a' W/ K( |( g W+ S" `7 ^; T7 R8 V
conda install xarray
) z' u' m* ^5 N 6 t7 I$ p4 k9 {# c: s" w" \- j
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - 1 l8 W+ o! N! n' l
. P% r* l' J6 q3 l: ?9 b
9 D) ~! l; K b+ l G% D
- B% Y: @9 T, s
' {' I( i& k. m: K) I2 U5 {3 `+ }/ e8 |$ V/ h$ A1 }
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)$ |1 S3 y6 A* d' x
% N+ A- i8 s( `. G1 L% V文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
" k( c2 T5 G+ v9 Y4 _" Q* P5 Y第三步代码如下: 6 o7 h& ^: c+ I
- / Q, u. n/ q; o5 }5 }
- 9 Z) {1 B& Y0 H% G. @
: H* j0 ~( O; o( s7 g% h
; K8 z. `" s" M/ E6 q! Q
1 K: R0 r: Z) i' L f3 M- 3 E1 G# W& T$ d, V7 g& [3 E& R; d b
) q) }+ P* H! g! B: q- ; g6 k( z ^; \% |
* @, v5 e) m& C+ L+ g- @
2 C. d. B3 m$ d6 b
#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)
( A+ u( a: E) |$ x* l, @
' `4 j7 @' `! K- }9 \( n' v第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
- m3 b1 Y2 A& a+ ]/ E# w
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
6 k' S" }2 b6 ^' I* K( H* ` ]5 w
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。5 v+ [1 ?$ w# _6 x5 b1 U* {
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
9 ?# s' {" X: V4 Y完整代码 . d3 }; X# t) A. i
- $ L9 v0 R7 I0 x7 j
2 ?( [' h. c. u2 H
' `( V4 ]* D9 ^( h- . l( P; N7 \6 z U$ ?2 O
- - j4 f3 E) G3 R0 Y! [/ k8 r
+ o- N1 O; o4 |7 a7 Z9 ?% [- . e* q& H1 O7 S2 a% a
- 0 a/ j& h2 u+ }! P1 x
- " \! u; c( |- [5 j* n* p7 P( ]. a$ z
! o, f; E+ y: z5 n# `* ]
, s; `: J6 P) d2 z+ l- / X8 Q0 o) q3 g+ r- l7 j* Q- S
* q4 [ `# d" n+ _& \- & |. Q: N; N1 x3 ~. n3 c
0 r4 R4 H% B3 W: J8 x% l% X+ L- 2 ?0 e" j7 s. @
- $ U% r) {# ]8 f6 x3 j
; }* [2 |( d- w. s9 r# _ |1 d. S* |+ N/ w
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) " T7 v5 T& a0 z) e
|