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

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

[复制链接]

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


  • $ a; g4 X9 _! v, a' W/ K( |( g  W+ S" `7 ^; T7 R8 V

conda install xarray
) z' u' m* ^5 N

6 t7 I$ p4 k9 {# c: s" w" \- j

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 1 l8 W+ o! N! n' l

  • . P% r* l' J6 q3 l: ?9 b

  • 9 D) ~! l; K  b+ l  G% D

  • - B% Y: @9 T, s

  • ' {' I( i& k. m: K) I2 U5 {3 `+ }/ e8 |$ V/ h$ A1 }

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)$ |1 S3 y6 A* d' x


% N+ A- i8 s( `. G1 L% V

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


" k( c2 T5 G+ v9 Y4 _" Q* P5 Y

第三步代码如下:

6 o7 h& ^: c+ I
  • / Q, u. n/ q; o5 }5 }
  • 9 Z) {1 B& Y0 H% G. @

  • : H* j0 ~( O; o( s7 g% h

  • ; K8 z. `" s" M/ E6 q! Q

  • 1 K: R0 r: Z) i' L  f3 M
  • 3 E1 G# W& T$ d, V7 g& [3 E& R; d  b

  • ) q) }+ P* H! g! B: q
  • ; g6 k( z  ^; \% |

  • * @, v5 e) m& C+ L+ g- @
    2 C. d. B3 m$ d6 b

#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)
( A+ u( a: E) |$ x* l, @


' `4 j7 @' `! K- }9 \( n' v

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

- m3 b1 Y2 A& a+ ]/ E# w

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

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

85ef60589d722cb16dd8b268ea80ea05.png

6 k' S" }2 b6 ^' I* K( H* `  ]5 w

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。5 v+ [1 ?$ w# _6 x5 b1 U* {
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


9 ?# s' {" X: V4 Y

完整代码

. d3 }; X# t) A. i
  • $ L9 v0 R7 I0 x7 j

  • 2 ?( [' h. c. u2 H

  • ' `( V4 ]* D9 ^( h
  • . l( P; N7 \6 z  U$ ?2 O
  • - j4 f3 E) G3 R0 Y! [/ k8 r

  • + o- N1 O; o4 |7 a7 Z9 ?% [
  • . e* q& H1 O7 S2 a% a
  • 0 a/ j& h2 u+ }! P1 x
  • " \! u; c( |- [5 j* n* p7 P( ]. a$ z

  • ! o, f; E+ y: z5 n# `* ]

  • , s; `: J6 P) d2 z+ l
  • / X8 Q0 o) q3 g+ r- l7 j* Q- S

  • * q4 [  `# d" n+ _& \
  • & |. Q: N; N1 x3 ~. n3 c

  • 0 r4 R4 H% B3 W: J8 x% l% X+ L
  • 2 ?0 e" j7 s. @
  • $ U% r) {# ]8 f6 x3 j

  • ; }* [2 |( d- w. s9 r# _  |1 d. S* |+ N/ w

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)

" T7 v5 T& a0 z) e
回复

举报 使用道具

相关帖子

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