|
第一步:使用anaconda安装carray库:
$ a0 o4 M" H0 l% @5 u! |
6 b' _3 o7 c- p: G& |2 [9 s8 C
conda install xarray4 {0 ^0 U6 ?; r+ e- Y2 a
7 N4 s J" V' A8 y( \
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - , q: F, J( `6 R0 _9 H' s4 g. ^) G
4 C3 f+ g3 K, `) h& G' r- 3 p( o- x, b L6 }6 s+ x
- & O% ^( U2 m. Q( w& ?
7 T8 P. P) c% o3 X8 k
# }" u( L* V5 `( g! i; L
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)
5 Y/ P- `, m; L7 P% W
3 k0 D4 E2 U9 H, R' X9 B文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 ' J# D- ^2 P- b, o7 E
第三步代码如下: 9 X1 _/ R- O. Q8 G3 N' m5 [4 j2 o7 ~
f( S6 {& k+ `6 u5 R+ ~
, t% r4 H2 r5 ~$ V
" v1 \" o- ~( r' c6 a
& b6 l4 |1 o/ h; S- : @* z4 g+ [4 o8 f
- " _* U$ b) l+ a. ^% o' ?# n1 m' b
- 2 l" V! E4 I! l: i
% U6 J/ e6 E1 R( f- ' o% O3 C/ d; U7 ]( y* n
4 E2 s" \# d: v6 Y% u. f+ P
#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 ?) `# w4 j& c' _! V9 _
) S* V0 W" H [3 p- m; k第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
9 d& R! A: t; `2 e- K0 i
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
9 N. K H1 L6 r# I% _/ _# x9 j! d
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
: l* q0 q3 V* I, C! l' L0 V在这里,我选取了40°N-55°N,115°E-135°E范围的数据
( w) p' m+ _% g6 l
完整代码
( U! k1 W( W7 C
+ D! r; f9 o! h. ^/ n- $ J" i C. S! _: n8 X
0 `" T6 H5 G! }1 ~- p. H6 V- ) w, M2 Q+ l: q7 I( Z( J' v
$ H- g, c' p4 `. _( x- % e- L2 [7 X8 V6 U
- 7 x2 h. h& a6 {9 W( T! c
- / }/ J" C( R8 O: j8 }; z2 b3 K
0 w6 O) P$ l; u( w- 2 V# ~$ Z: d" F* y7 |6 p0 |' k* }" r. \
m8 {, Z, f$ V# ]6 T' Q+ A$ d- , M% v0 _% e% c9 y
- / v* s8 w( |/ K! A# g, H# G
- % k1 ]4 c& r. R1 z& U8 T+ ?& H5 }
! r# C1 Q; |+ a: h6 w# G4 W
2 h B/ e$ _/ l. W# U8 q C% X- 2 ^1 u$ ~$ g+ u4 L9 B- R! ?& q
# M3 ]7 p6 R3 n) c9 ]& A2 ?9 x7 g( b* s! L) u+ B8 P( B' v8 A: g
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 c, c- f/ y; u/ @! y: h& j |