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

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

[复制链接]

第一步:使用anaconda安装carray库:


  • ( h" C# K5 N* b. w4 j9 d5 Y& ?6 W' L. b0 Q  u6 S# U8 s

conda install xarray
! \# _8 v6 m: K( R


6 ?. u5 \3 d& M6 t

第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc)

以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例:

(数据下载地址:www.52ocean.cn

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 0 i& Z; U1 x6 f$ X
  • 7 b* |" K  {4 V6 T2 ?( i
  • ) P' o  c% H5 Z! p$ x

  • : C6 a% b" \% J: m' b/ X
  • % |- Y2 V, C1 W; i7 P

    6 D' X. Z! i; w0 b( t

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 u( l* i$ B7 ~% I


0 r* x6 o! H, o+ x. z: o

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。


) P7 _$ a( F: `! z/ S

第三步代码如下:

: E; k6 Y* K2 m0 _1 @/ o$ s. `

  • 8 G2 _6 C( O# t$ l& D. G
  • * d( O% c6 x/ u) t* E2 U3 M) R# N

  • " Q3 w/ \9 j" e: R' I

  • 4 O2 U, y7 @, f; A3 P, u

  • - b, `) A0 X1 o; A

  • , z1 i, t0 @1 g0 M
  • ! @  C$ R' x9 g5 i& [: `! P" j% w
  • & Y: o3 q, a0 e9 b' q+ [

  • 6 [, c6 N4 y" z4 C- w% c5 s
      q1 \! m# Z' i( P. G

#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)& w8 B, A1 j8 C( Q0 C8 K; Z

5 m! e+ B7 i2 Q2 B  W0 e7 W5 f

第三步:气温数据取出

Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

& L9 H' j4 t' ]

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

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

85ef60589d722cb16dd8b268ea80ea05.png

; f% z$ L( W2 j3 q: x: c1 A% O

第五步:选取特定经纬度范围(高度)的数据

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。" |. R: q9 Q- ~9 h" ?' X$ A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


, P* y2 X) B6 S

完整代码


, G4 P( Y  P1 `) ^  s

  • & z6 F4 {* x$ I( E8 M, y" `" r
  • ) J  ~+ e) w  h6 L9 O9 `& D3 f

  • 4 V9 I1 @" d+ E, z7 B

  • 0 b0 N+ d+ ?) C; H; _4 ?5 B) M7 ?
  • 3 t- }* _; x! k2 h# d) A1 h8 H& `

  • 3 H! l9 r+ v$ t8 g. i) b
  • 0 ~! h0 R5 f) f% j2 M  A' Q
  • 5 T: t+ ?! |, L- M

  • 4 g( C. v  i, `

  • 8 W8 z6 z& E; ^- d6 m% K3 D* V+ N
  • ' J8 q- t# z( d7 o# V) z

  • / C3 C! `4 f* W/ z$ Q+ C$ L9 F) y6 }
  •   m  Q# Y: o8 O& ^- U/ W7 V
  • : h8 s2 ~6 Y& O3 \/ m8 n% M

  • 9 g, A0 F& {% [- b: m
  • # h6 W3 t! O$ D4 O9 \

  •   q  q; z7 I% C6 m# S. I

  • 1 y: N" w1 |! ?
    & m/ c/ ^+ W' n

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)


& w, J: e2 y0 ?4 w; Y
回复

举报 使用道具

相关帖子

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