|
第一步:使用anaconda安装carray库:
+ \ O0 d6 S8 ^
% T/ y+ A, i# e; i
conda install xarray
3 |4 S* H$ j* B& T/ d
( s5 X& o. P3 C9 j( I$ T第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
( K/ V# k3 g& B
9 d, y- k8 k8 d, E- ; e- c) _- }+ C/ w* Q1 Z
: n* t( i7 a: b) ]9 Q
% V5 Z" a+ z1 i, d& ~+ X8 g) z1 p0 L" ]# k
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 ^/ `9 E* x8 d, F& Q& s
& ?% b! t: E+ u. Y$ M; j) g文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 5 P# @1 j9 @ \' D& l& U* y4 X- K) ]! e
第三步代码如下: $ d' I' r9 R) L! x. g# P
- . Q5 V6 r# _/ T
6 N k" S* @" a2 o$ u- 1 D, O" i0 I9 Y5 _7 m
: y: A: x& a, {) t- # t' o ^# C. x6 b
9 s [3 U+ o$ i$ q) e3 C: P- , T# T8 H' d/ V* M5 F
- * P1 u" G) n& i3 ]! N
- + J, r P4 u* |5 [2 P% a; x7 b
0 x3 c# b- h* W. D
#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)% {7 T8 Z3 \8 C0 P7 b9 Z' {- x
8 z( [- Y3 u: Q8 c. D) i5 ~8 d第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
l6 {' ^4 q3 y" L6 `9 R$ z/ o
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
& i9 s: x4 Q* E" i
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。' u) k0 U0 a* p! p
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
$ }' T" c' D2 y6 t" f+ q! V完整代码 1 N! t. e3 j* U& v3 ?
4 V1 F6 `9 K/ K2 G P/ Z5 v- & v/ Z. D3 \: O. Y
/ ^/ }1 a4 l# R
; ]9 Q( i0 h0 `9 V3 U) L
7 ^& H" O+ A( D
6 N3 M" [ ?3 t( u9 x- {& I& \. I% w9 Z; A/ m3 d
- 7 F5 x% T1 t7 n0 j" I p% h6 Q
- ; r% d9 V U! p" j5 J4 Z
/ S* t9 p, |7 }6 }) W; _
% \7 {, Y8 d; K5 i
/ G/ B- S6 H6 N d' G, ?8 D3 d+ U
7 d0 L6 |. ?5 Z' u5 ? |
# O8 S) L4 d. b& V) _6 d- , p3 i3 {6 f- j9 e; G5 D3 h
- 5 T) n' _' W5 m+ @" ]
- 3 A1 n9 S4 `# F3 Z# ^
: `! T( o6 @/ V
( F% Y5 ?. |- n
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) 7 v/ p0 v% W, C6 w
|