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

[复制链接]

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


  • / R1 l: |5 o$ U! w+ G' X7 T3 J- g: L1 R; B8 F0 c

conda install xarray
% M5 x& H- g. U5 E4 U% @- G


3 D$ z6 t8 Q) ~3 o  i1 U

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ' E! T  S+ P, O. d# x+ x& c

  • 9 o6 y! |; q# ~

  • & j( Y2 S0 w# f; ^/ ^9 L$ t& F$ n! }

  • ( ]4 R5 K5 A) m! ?! E
  •   M. Q! e- D3 x

    0 t! L6 H# x. _) s

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)! G9 b( G3 o' c' Z

2 G$ n% a: z& j) b0 S# \

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

5 b7 a! g% Y1 L: L1 Y% }

第三步代码如下:

% a5 @! e3 w: q6 m2 c  ?+ q/ Q; f

  • ( q. J# h" p1 d/ z8 `. s. N% f

  • 9 W/ v9 N$ N  K9 B8 u
  • % i% ?/ w7 f) v$ G- r' v; d! `
  •   o# B6 Y6 _/ Z+ S/ P. @

  • 7 Y: y! K# P+ ?9 x, F5 h* a

  • . w1 B5 j' _3 V, J' ~

  • , q+ v* M5 p4 h8 L8 G: R

  • ( ^5 F0 d4 ?4 }' p9 b, i
  • 7 l5 A- D! R+ L; {
    1 m! ?. e& q1 C6 W0 v9 ]

#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)  V2 d7 z2 N) X5 L

; g3 Q% Z; T" n' C0 S

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

+ @% N/ q! j8 g4 i' ~% L) T8 ?3 O* S

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

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

85ef60589d722cb16dd8b268ea80ea05.png

3 o) T) r/ I1 T

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。, \& ~8 O' n' A
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

. L' h9 m- ~5 b" e2 ^- K/ u. r+ v

完整代码

! t' j  ?# E0 J$ L2 b# y/ \  t
  • : O8 Z# p. q0 R( C9 ^; _7 ~

  • . u' \5 Z1 C$ t* {* H
  • 9 s" O, p+ f; u" _3 j4 H+ D5 X

  • $ G* T& V/ E( L! Q: R4 i; c

  • # E0 ]8 }% L0 H# [/ S

  • ' ~( w3 V( v" z7 T3 i& `# X
  • - [8 r+ m! H5 q* V

  • 7 S0 |; ~% a1 j/ O3 V
  • $ }, ?6 y! d+ y, {
  • 2 z$ t  @% l; G4 G! b% t4 ~. r

  • : V; I" e/ E2 g2 K1 T+ L/ C5 z% H. D
  • $ s& I1 x1 a  k' G: Z
  • % W/ `! G2 W1 V# ?$ c6 `
  • 8 {  \0 |' d' ?( a! T- P0 b* Q

  • 1 f. m: X- p# E* `- ?. a( `

  • % \# J8 R3 w/ |0 R) B0 E3 b4 p
  • 6 J! c4 A6 D9 G+ S% T0 l

  • ( Q" f8 P% `( F2 A  x# ?( w+ W2 R& D- n6 w# d+ 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)#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)


+ @9 o& B- R# i. L+ R5 U
回复

举报 使用道具

相关帖子

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