收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Python] 【气候软件】Python1: 读取气象数据 NetCDF文件(***.nc)

[复制链接]

第一步:使用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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • , 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

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

可以看到,文件的坐标有时间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配合使用。

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


9 d& R! A: t; `2 e- K0 i

第四步:选取某时间段内数据

比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。

85ef60589d722cb16dd8b268ea80ea05.png


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范围的数据

ba790cde36edf774adba4d7236ae5bae.png

( 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
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
有风
活跃在2022-10-29
快速回复 返回顶部 返回列表