|
第一步:使用anaconda安装carray库:
) N: |7 b5 V o% K' {) `; {# f, O; ~0 q1 I- }
conda install xarray
; S" T$ i( p/ k; b2 f; g* ~, q9 ]
1 h4 W: ]" N1 w/ {9 A第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - % i- J0 H, ]: c1 T* m
8 x2 e6 ]2 |6 v" ^5 {7 U- # _; R( h! @% m$ `
5 b$ J- M" S5 ^% x# G- % }/ [$ J3 Y% ?
! ]' Y/ W2 A( d9 L1 S
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)- n9 l0 E- O* d& l
; t! P9 X3 L; H; `/ M
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
: c# q# i7 d, B9 T ]. B第三步代码如下:
! t0 Q, |+ X! }2 d& ^- * u# v% r( l1 h C+ {
4 R5 U* B, n+ v/ T! [- + w% m8 H) ~; \& L9 I; s) k* Y
) ^: @9 y7 g" m9 [9 |- " Y2 m- S6 {( F# U/ p
- & C3 c9 Z; i2 M0 o3 A4 M
- ( e" Q$ X1 h9 @: Z2 @% L" l
- ) n3 e. U/ e O8 j
) U8 P0 s/ H+ r4 e3 O
! j; b7 L: V. I {
#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)/ e' |) B1 o: N
6 B+ Z4 G" e) N2 D
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
, Y+ P- |" @- a" W- l
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
9 u4 h5 B) t3 D
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。, S p, e- |* o/ p
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
: R5 |' H, j( D% J$ E$ J
完整代码
P z3 X* h M" c- & d* w7 e" l5 A
- 7 M: h t/ _0 e: f
- 9 E) h- r' Z: G" r' N
- R ~. {( I2 d! Z
" I @* z# a! @! C( w# g- 7 P2 f4 S2 z( p
- 5 ?+ \; f5 z z I2 J5 @
9 [0 F3 O3 {" p q1 L1 ^4 L9 }4 j/ g
- H% ?: s7 m& w0 I, ~( U" k' P3 V$ B- ! G( G( M/ p- V+ E/ A
( H; t0 m) n( L0 F- + R& b; x( [- E
t. P- R& I% P; H `4 I W0 \0 F: c
/ V/ B5 ]! k8 h$ k' \
0 H4 H' o9 ~. U7 a* \2 J
- {9 L x- h6 n: i
! E0 H: ^/ U8 ]6 S: \; Q* P
7 E9 M* Q) p2 O4 b5 c6 F- i6 M# X t5 o& Q
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)
( v# {% D$ c/ o- M |