|
第一步:使用anaconda安装carray库: - . L6 m" c* ]( _6 T9 s3 K) V
# R: Z6 l2 _! P% I
conda install xarray
7 B/ o: }5 U3 E 4 O3 Y8 `" {7 C! z
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - 1 d, F- f' j3 k( E; g
, d9 ?3 u$ ~: d7 _- t- # i2 f6 X& B% N. {
- 0 T' F) E) O( j: z' h5 Z1 C7 i
0 }" O P0 E" S6 q% T" R- e, [0 P( S& ~3 ~- R+ C1 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)
4 J' S( `1 U' ]% a& I( {0 U G5 ]) X+ {
: l' \( { R6 K, I文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 . Z0 o, {6 V3 {+ p) @
第三步代码如下: * h: j! `# J# b0 j6 O0 u9 {
- " G0 t1 Q& N4 U. h
- 6 a6 i; c. I; ]( a" {- K3 x
- + E/ u/ V/ F% F' \' V! F7 m
4 {7 V7 x3 ~. q$ W* F8 c, w" f* ]1 h- 1 q j$ K6 r: f! ?. h
* _4 I. `8 P+ G1 E, o9 c- 7 {1 _$ @9 | F, T2 P Z
- 0 Y5 \$ [! @/ s, W) |' M
- 8 }- G# m5 a( p4 g1 j5 d
p8 i' |: a! D, P1 P+ M ~- F7 n: s
#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)( |% S2 W( o* d5 K
6 @) n, G2 {' Y, R第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
. z6 h# G9 t( V- q3 k8 [: x; [
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
' B5 J% V% N4 r. q8 E+ S2 J: g
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
$ Y1 l6 W- F8 {/ }! b( E在这里,我选取了40°N-55°N,115°E-135°E范围的数据
1 E( K- g6 c- O完整代码
( v9 Y7 E0 i% Q! ?- 8 c! x) m( P9 q0 x5 U2 S
- - P( R3 _5 g1 B4 c& F8 n& M
- . C2 U- [" R+ j; ^8 [2 U
- t- ]0 E/ L% m4 E2 w" M
% S, X- ^6 {. X9 [8 ^8 O5 u
& W% a/ M4 [5 n! y$ y8 C+ \
% N* K& q& @" F. v% q
0 S( }" x( ]% z; h2 q, c& K3 @- 8 z0 V H+ M: d& i+ q7 j
' l* @# `6 S( S! b7 e6 T- 6 @- Y" E: d. }! N- P( ~
( f( p/ k: ^1 j- N$ y4 y- 2 p) O# ~6 `, T. e) s1 V1 l9 E
) Z; y- a( X8 {* V9 T( S' k; C
z3 z f) C9 d8 c7 z- 3 Y* r5 H( T' i3 j. K4 Q
2 n( n9 \ M* n- u, ]- . z% V, q3 O- F/ b
0 W; W1 r7 r& i3 x, A1 V
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) 6 {! R I6 ~# J
|