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

[复制链接]

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

  • 7 A& N) f& l0 T
    , L  i* r! t- M6 R, b3 U8 u

conda install xarray& s4 w. R/ @+ _! g( V

/ [/ F  [, w: P$ U/ Y9 r+ @

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 6 e8 `) u! [' y6 c! i7 a, a: N
  • ! v4 `! Y8 d, r* f0 `+ g
  • 0 X$ s8 u; ~! L8 W) M% \- x, a
  • 6 F' b, ]8 b' v# Y+ l

  • ' N6 N8 g: P, u
    * Y( X+ b/ ^; P) M

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)
, P% i- ?2 m3 S9 K


0 q9 S! L- c" I

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


6 L3 w. B) @  h% k; g1 U

第三步代码如下:


% N& M; X' p: X+ W! a9 o4 \+ d2 t
  • 4 K+ R9 Q% e& C; g+ H
  • ) K7 N; S' ~9 W3 Z& W; H$ ]

  • " X5 l6 u7 h' f/ d: p
  • 6 B- J2 M+ F" `

  • 1 r  J( L, B1 F7 v* i- X7 R: T3 L

  • ' A7 d$ w# `- N" i
  • ; _0 ?& b4 X- x' v; b% s
  • * z8 h1 `5 p8 z3 }0 e3 t
  • " A8 F4 d5 ?- M/ S7 j$ p. [

    & L) [1 h! V6 r5 |4 u" N

#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)
! y+ Y0 r. V6 v3 ?8 n


7 K7 U4 X0 \2 b5 M& ?4 A

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


+ m, s8 Q. X! e) G, _

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

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

85ef60589d722cb16dd8b268ea80ea05.png


) T1 Q( _' M, n+ P- k2 r1 t: V, q

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
- q+ V+ }7 K+ L. ]$ r" q3 \+ R5 C在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

1 ~( n% g2 n$ v! T5 l( L

完整代码

  r. l6 x3 x* Z, {

  • 1 |5 R* s& d1 c/ y7 p9 k. @9 X

  •   _. Q: m9 r8 q! j9 t
  • : l9 t) h) w8 g; {' [, r  c. H

  • 3 q4 m4 ?3 L  S8 n

  • 4 G) O+ o. X! k! ~
  • + z# A5 t) S" c) ?$ p6 [2 g# Y
  • # w) j/ G3 B! M
  • ) l$ O  u8 o0 V  g, H7 l
  • ' C& c6 C; j$ f; r

  • + B  \; p: q  ~7 c8 E" D

  • + ^( J' O6 g+ U

  • - b" E! S) x) I. {5 D/ q

  • # p+ p! Q* M5 I* i. a( K6 \
  • 3 O6 q1 v  D' J. t

  • ( W# z& v  [: b( D1 l2 R3 F* \0 e3 T

  • ) z8 ~: |8 e, p, v& E# ~

  • / f8 X6 Z( p) J  h# j$ O
  • . D0 L% B( X# ~: o8 y  K. g7 T7 p

    9 t9 T# G/ Y' i# l  t9 G$ ?8 J

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)


! c0 H: g4 ]# |! r; k4 k
回复

举报 使用道具

相关帖子

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