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

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

[复制链接]

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


  • ; x9 g2 r/ ^- b9 K4 y
    ' F4 |4 u! F/ |& Q1 E

conda install xarray3 P# v! |) I# v: {( O4 i3 q$ r

. a# U  ^" u9 n4 g, p

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 4 d' v, r) }: E7 u5 \( ~# a9 o

  • 8 h' E2 X: b' H' Q, c2 @0 h

  • / \7 ?/ \( z- @- ~+ {, \8 S

  • 5 R" C* i9 }$ ?1 V' t

  • 5 j8 B" U: p9 N& E5 {7 c. Q6 w6 Z' d
    8 N, Z& @' \! g6 N* M0 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)
3 @/ L/ A: N, C; V. z8 V& p8 a

6 g4 d( Z* G: p  O

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

- i- c: I/ I- B+ T

第三步代码如下:

- Q1 Q8 F, ~7 T) Q- |6 F# z+ p8 L; h
  • ! u/ W: o4 r1 n  y

  • 8 H3 M, j1 p" t1 K, Z4 f

  • 9 m! I# ^2 r" p! U- Q0 j
  • - s; z' P) n( j* G% {5 _0 c
  • & t$ u& H8 c2 x9 [  }3 y. p

  • ! k! L& O* D. D, _5 t
  • , H& ?% ?+ ~/ a# \# h/ T; B
  • & c2 F+ z3 x6 u5 `! F' \$ f
  • 5 J- L, C7 D# m1 N: d$ s  L; w

    % W" ^( U% o- |- C' N# p; z

#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)
/ i4 B: o2 F" b6 V# N& n0 Q% d


1 j9 l; V% e: g0 Y9 K: |& M- h* E

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

. l+ z" [/ U% g" W- R

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

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

85ef60589d722cb16dd8b268ea80ea05.png


: |3 n. ?/ f1 n9 {, h- u- c  n

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。! K+ E- O3 C/ W; ]# R/ u
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


1 i  C# h7 l) ^* F" N

完整代码


5 A" i$ F8 \1 f5 N+ |) h

  • ; w  D, N5 ]; s: m

  • ; t( O" H% {* M8 X0 y# y9 c' @

  • * I. B) }8 T+ i' g- `$ W  q. _

  • & m2 B7 S& f6 H- A, g

  • # d! }3 \1 Z, l! a1 V

  • 6 E$ _: A4 e" ?2 A* }
  • / q$ J# n  A  H0 W3 g

  • 1 |+ h! ]0 V9 M  B& l+ e- Y- P) ?
  • " z) H4 ?! y! w. Z- N# ?

  • 2 q. f# W4 j# Y, n9 f( _
  • , q1 G, A# W, j
  • / n: k: s4 v. s/ c

  • ) C- R8 E: |0 T
  • 1 z. C7 J. Y+ |' R' o

  • 9 x' f4 _* m9 p. H; t& V8 `8 V* o
  • ; S! x6 P' H$ r/ H/ W2 \) |; T

  • 9 w! R: R! y+ W+ S. S

  • 3 y5 N6 O0 ^9 o. @. F; e2 V
    6 w2 J+ b' b- v' W$ Z5 R1 |

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 ^2 \1 @, k" N$ m
回复

举报 使用道具

相关帖子

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