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

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

[复制链接]

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

  • % u/ a2 Z& w' @8 a
    " l2 `7 P5 @$ ?2 g2 ]

conda install xarray. Y. L. U2 E  Q, d

: N& u; S8 L( \& d

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • ) x8 j: h# f: K) ?* `( ]% n
  •   e/ f6 m9 }2 I$ B* u3 K4 @2 j
  • ( v3 e* f1 [7 r/ F) z5 n

  • % x. m  B% S3 O8 r$ P, [+ p

  • & O3 m3 r" S- t' I2 s, ^& o
    * n1 \& u: I6 H% a

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)* L7 q* B0 q) o


+ h3 v* \1 g3 J+ a% Q: S9 {3 L! `# m* \

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


  O" ^9 v! [3 ]- `: I, K7 v

第三步代码如下:


0 \" E2 k* Y/ x1 j5 w
  • 0 C1 Q& Q" R: [9 r. S0 M
  •   ^. U  Z9 ?$ V" m' {* Q% P
  • % @2 K/ X6 Y8 K$ ?7 o, W

  • & n; K" A% r4 z6 h" Q
  • 5 E8 m0 O5 p7 r, t9 i+ e
  •   u7 m- D/ v- t5 I; i  }: ?
  • + J- Y. n- r% y( ^* C

  • 5 k7 ]  b/ e; _/ I+ R2 \

  • % l- P$ X# E0 Q2 @8 O5 b/ u! W8 o7 ?8 _6 M

#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 ]9 ]+ I  p% I$ N, m

: }( _0 x( Z2 A. b# r

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


/ j1 G# B  y6 ?0 [+ F: M

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

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

85ef60589d722cb16dd8b268ea80ea05.png

. K& K) j8 \/ ?2 p

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。; B  m7 _, P1 A8 q1 Q7 A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

1 @( ^( L: G+ N( ?9 t

完整代码

: |7 M. a3 K& x) h

  • & c0 G0 i$ E8 N8 h) z7 q5 Q) z

  • 9 Y8 ]) Z6 N, h' C9 ?' K

  • 8 B/ n) V6 f& d8 V- o7 U
  • / D8 Y. l5 }( Q. w9 g
  • 6 c  B+ |3 h2 B
  • 6 [' W" B) [) `% t0 F+ c! o
  • 8 g3 x% f0 \3 u0 c! ?6 H& b- A
  • 0 N; @8 Y, r9 L" F: c+ ?

  • ; }" P& O  V6 ]1 I; T2 }: L
  • & W, |! V+ Q) J/ O
  • $ {' Y% M4 M" ^0 L' c6 r

  • ( V$ s, w; s& }' h5 k/ w
  • : Q& S# t5 Y0 c+ G- V

  • ; l- R5 ^) n6 D/ b- N1 x
  • ( x8 @# a9 W2 z$ O! K

  • 3 k. T. `" s, u( r" s6 C2 K; Z
  • 4 O5 N* U+ |* y  V% e: Z

  • ( T5 Z  S) d8 w$ q! Q% }& q: |( d6 o8 D! X/ x; C9 `: r) 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)


; C! q$ E; A+ B6 f" b
回复

举报 使用道具

相关帖子

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