|
第一步:使用anaconda安装carray库:
% f. `, b! I! d: S0 K0 g' ]! S8 U& y" H1 `0 X3 w; Z
conda install xarray
; d" s* c0 X- k. X3 [$ _- Y
. _6 w/ Z; N7 p/ u8 V第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
. O( {4 A4 E! u
^3 \1 I* s& r8 \/ v0 x- x6 {0 \; b/ V$ X! K
: j; X- V% s4 s
4 p. p+ G& o6 g/ t
1 O3 M7 d6 @& ~/ u K) u; x
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)& J. v$ l5 X/ H/ c" E6 D( a
0 G7 ?# [9 _. ]2 P/ W9 k文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
4 B, {3 k4 y- c. ~, ^第三步代码如下:
) @0 ^& N) r) e/ V- 1 P/ b) I {* r& _) [
! B- @. w6 K7 f3 ?
! j' G5 k ^' {2 U- T1 L6 H
! e9 \3 p1 L0 E* `8 F2 S0 I8 L- & v" l) K& c6 s
* @2 e2 T( P- p8 |7 t0 T- ! x6 s" P( o& A1 }8 z
- , b/ Y2 F) N, k% d/ K
. F, X8 U, U- l& b8 A7 [$ r/ l; \1 T7 p$ ?8 l! U2 s- Q
#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 B" p# \( A) c$ K+ q4 R! r, n! w; x8 w
/ i, T, _, p% P& ?% |$ d/ v; N1 F第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
' Y- z# u7 d" C! c
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
1 L2 ^( y) \. ~; N( k( Z; E
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
4 f" J. t& A, B: G在这里,我选取了40°N-55°N,115°E-135°E范围的数据
+ i+ y1 r0 \ c( ]* Z% Q* I
完整代码
- Z! I8 d- X% n9 E, `- - {& O) T4 P4 C" ]! x) V! w
- ' @9 @7 n- v9 @- Z- N
2 c: m5 F/ n) D+ h- 3 ~) @1 A/ J7 y; V" P9 V) B; ?
) R: _8 j0 q( a1 O% t+ F
- ]1 I; x9 n) q5 L4 w7 J, k
3 b8 k% L! D+ E2 f
1 P* ` W: K4 H+ @' ~/ f% n" r5 c
1 V% L9 V2 K8 p# Y
/ H- b% i0 O9 ]* |: j0 L5 f+ V- " _( C# G1 d2 w
) [5 q0 P% D' W7 M) d- - Z# u! |$ @* L! G4 G
9 Q0 }7 Z3 t5 [: n6 i
$ l4 v* \& E; {. {4 [$ N
9 T* j6 C+ ~" U; z# C( l1 s+ j- 4 n3 D: b3 ]- c V3 V# Q2 B- J
$ \. f( k/ S4 p; ~ f9 h% r% F5 i# V0 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)#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) % w* V6 u3 ]* W% {1 g5 R/ \( P! h
|