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

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

[复制链接]

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

  • 1 n' p0 e0 E6 D' c* o
    , A) ?9 q0 m/ m. i1 e

conda install xarray3 _: Z' u( \# b( L7 l


  Z5 R; T- j" N6 g2 _. H6 w

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • " S0 v4 [* k7 u* T

  • 8 |+ G: Z9 C. i, O
  • , S7 |6 O: K  Q5 I9 `  J
  • 9 q) m5 `3 T/ _5 s9 B, }

  • + O; Q* B8 z- r" v( ?$ }3 e: \& C% 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)" K0 `9 K6 j; S3 B/ B3 A


$ s, q7 E: O2 C, n$ M

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

( |) n& ]' L/ b0 I5 s' ?

第三步代码如下:

) G, @! M/ O5 ^+ [6 q6 [  O7 E, W

  • " D5 l5 l' Q) c4 ?* v

  • 9 f' x  t3 d) [: h+ g
  • - [# K9 }. o2 ~8 w- Z, c

  • ) K4 @: q7 `6 B" y6 a7 h

  • 2 U# S# R2 J9 r" a4 p
  • 5 {& m' v7 b" C" E7 j5 Z  }
  • 1 U6 N7 l# B7 C- H. s& N7 h
  • . d( d  E5 }, P) ^) Z6 Y
  • 1 E( T2 n4 [6 h1 y

    $ K# A- ~& e, h7 m( W' e7 y7 d: o

#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)
- M; k- U+ y! e/ q9 S% k) B

3 p0 R- L- ^1 _! n6 y3 @% |

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


( w* V! c: R8 |, e* @, o+ T) o2 t) L

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

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

85ef60589d722cb16dd8b268ea80ea05.png


) D2 V1 x1 `  [

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。1 r3 S# r- |+ E  b
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


' b" {, s. i( v$ p8 `: l+ l, F

完整代码


# Z$ e( T/ G9 b! j; X# M

  • * `3 Y: s/ S/ S& E5 c7 v
  • ' Y2 g2 L; D" e2 x: T% O
  • ! j5 \+ I: C7 J& X% ?9 b

  • : Q5 o5 d; C3 ?: e- q

  • + f( v3 z9 C2 ]& E% h; E

  • + h2 H3 o; w) G5 B) I- A  s: S

  • $ d9 d# S, W: U  g- l

  • / B, q( N% \3 b

  • 7 w4 @5 u9 d4 T$ r! X0 o. E! ^

  • # z' _, g- z" Z6 \
  • ! r0 }3 |+ V8 {; w+ r7 @1 J) O
  • , ?$ g  I  k& X5 i
  • . m4 W& S! P: g9 f4 P' k6 t" l% X  I

  • . Y4 Z* c3 ^, x; _8 s1 U
  • 4 n* V! z' d  m- R- C7 d

  • : u' {% y) D) `, u2 M

  • 7 o; z. B3 ^7 l
  • / g. \* P% a5 H" W3 k8 G/ h
      G! W8 ?, [* j6 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)#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)


. q1 q) h# e2 k3 x6 I
回复

举报 使用道具

相关帖子

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