|
第一步:使用anaconda安装carray库: - a4 Z+ K/ m1 d( W7 ]$ _6 A
$ y; r" X9 t$ v/ \; S5 u
conda install xarray
J# Z9 D! v- Y; K # L2 K4 G/ N) O5 [- v! l. t
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
, h' y/ d6 ?! L ^- & T2 R1 w- B* Z3 m& f; A6 h
- T/ d. z8 }( p" i6 U7 W- 8 P. a. ?& A ]+ f5 t% G& q$ X4 b) l
( o8 |8 }- i! @4 m% p7 U" b2 a5 _# f* D
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)
8 h% i- G$ S# z' T a" K( f) X 2 R5 R f. l% }$ W% c7 q9 }( j
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
- E# l# i' e7 J' d$ V! H第三步代码如下:
3 d9 u! u' t, ]! Y! U, Y" E" }) g- / b# w: `8 ?, C
% X: d2 W# a% X0 f- [' x
" {6 x4 i! s) @- ^- 9 P1 l: z( n/ r1 t$ ]8 c
8 j3 R* `( w9 l1 m+ ]8 q! y' |- ( `. v! X5 C6 W) j
! w6 i$ p- i! N' t3 H3 N7 c/ a, t1 r- 3 G1 F( c, F& n0 w1 l7 c$ X
1 l6 `. F% q5 E4 K; }) V4 T+ J7 ^
#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)
+ j$ | @1 h( C* _
* y+ n# v* r8 c, h6 ~4 W. L( _第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
" S# Y, h8 r7 m) u/ x
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
3 x1 D% z# M! v0 F2 V0 d
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。8 r/ i; g8 r" Z6 a3 `- w" H. a
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
4 _& J+ k. r/ b完整代码
; z+ ]9 q. ~; f& o
. t; W2 h8 e% r. s# Y- # j1 W7 f+ I8 {! B
# @* p& d" n. O/ i" b* ]- / x( p+ u; x- |! C9 f8 A: N
- " a; c" z. z& j; ~- s* u, G+ _: e
- # A+ x6 m+ W7 U& A) f( i2 r
7 c/ k! l2 N3 Q4 E- 1 p( v- V9 u i6 D, w5 N
7 S; X5 g8 j% N! U. V5 Y- f- " }1 q* l* H& T5 {. a
- $ N1 S/ ~6 y3 Y% S u1 w- T' H
- ; q0 S9 h Z G8 G
; `6 W6 i+ B ^4 o
' [ }" n' R+ X7 t+ I: G9 o1 w
% `( _% S% I+ n, a; Z- H) ^7 G
" q n9 }# v [2 [, v+ s# v- 8 f9 ^% I7 }( F- b, `0 E. x
- $ [% Z% d; ?$ O/ _/ P1 y9 Q
9 ]7 n, ~ y8 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)#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)
3 ^7 ?) |6 \# {/ v' V- }7 G |