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

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

[复制链接]

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


  • 7 l! i" S+ B+ Z; I% b2 T' r& `' Z5 F) n+ X- `, e0 S) p4 ~1 {

conda install xarray
6 R" K4 H& U; Z: u8 K

" T3 C1 J  w. k+ K0 _" f

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • : T$ P3 t$ U' m' G, r: I6 I3 g6 C
  • 7 |8 {0 H/ F) |

  • & A2 _2 c$ `6 a" F# u. q
  • 3 B4 a% L9 z3 {! r, g, T& E
  • 7 p, W  A5 n' _! ^! ?

    1 [1 q% P# C1 \' z6 b! @8 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)& }5 r0 a7 M1 H! }, w  T; c( U


! o6 M% U+ k" ~9 J! W. _

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


% j2 |8 i" E# ^% |3 i

第三步代码如下:


6 g( @# i, k9 l) n6 z5 H

  • + r& [6 H/ d+ A/ K2 Z' L

  • 2 a, a* s  M. s  |* V

  • 5 J8 [5 V/ }+ a8 H2 U
  • $ e3 ~/ f8 I6 I8 t- F4 c

  • ! g& ?' m* i7 z% ?3 X1 A

  • . d  d% U0 u6 A5 o" K7 E
  • $ R& s, o% j1 f! ]6 g, L

  • . T6 ^8 Q9 A; H

  • 4 x. c1 ?7 b3 k# ~1 I
    ) N( h! h" X/ c2 i8 `/ A0 {

#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)) H$ g* I1 K5 J


8 i0 V- O) C. k. |+ W6 B' J

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

) F/ W) S6 p3 }, ]

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

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

85ef60589d722cb16dd8b268ea80ea05.png


) K1 a5 |0 R, j/ Z" s1 \1 s  \+ m( P

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
2 G5 \% Y2 `) Q+ P9 h! M在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


$ f2 H6 y4 f) N/ ^

完整代码


5 s% {2 j) G2 |! x+ R2 K3 {/ `

  • ' ?4 L2 Y) d2 D/ J9 }- [& M# Z

  • 7 u3 l4 V5 R6 r) q7 W

  • / k& U" M! E& T6 t( o
  • 7 V6 O2 L0 p+ w2 w, J

  • : Z, }8 F, u# m+ |4 E: U4 N
  •   \- G6 ]7 V5 J' O1 D
  • ) _+ u; \. M+ X
  • * _) W- e9 n0 E8 l; I+ ?5 ^. F8 c6 S

  • 6 q8 P) S( L7 k) I; d' e

  • 5 L7 S1 p. w, A( x' |

  • 6 D5 l) R6 S' L2 |( X2 q! x( I

  • $ z. h4 b6 J( w8 P1 [: o$ u) k
  • 8 Z1 e$ c: [- R: D6 h- i$ J/ S
  • * P' H. w  ^8 n, a" i6 L& t
  • 7 w) W0 A' m4 H+ O
  • - p8 b: s+ M0 ~0 u
  • # R& [, d; k: w! M* H5 d/ M

  • / x7 p. N  R& P+ t9 U( w4 ^8 ~) Z

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)


" m0 E" m! k1 j  d+ ~
回复

举报 使用道具

相关帖子

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