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

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

[复制链接]

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

  • % a) J: ?/ i$ r4 z' l

    " v& e/ E4 g/ A. P& Y8 A; e* }

conda install xarray
$ P7 h  u# ~( {" S& c# s5 Y


# \2 l8 r- ^% m# S+ l

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • & n4 w. B3 N3 C; ?: d8 Q: H0 S

  • 2 i. ^: e4 a% o
  • 5 d& g% z' l7 C6 _! D

  • ) ?/ d5 _* H$ M7 ]2 @

  • 3 s8 Z9 m5 ~: y" s, H
    ' u# f: I2 n  R% R

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); o( |& s9 n0 ^: K

. e2 Q2 d; ?5 T/ F, V, R

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

& }* C3 X9 b- a1 Q

第三步代码如下:

0 Y% c1 ]8 Z: g" [

  • * a" P6 @! a6 T: X6 G
  • , B0 `# k" Y- s& s/ W0 a8 p
  • - s8 I0 I( s/ L/ d4 z7 P
  • 1 P$ U9 Q+ j! W3 q1 ^

  • 6 S) P# t: x6 n9 n( i# ~
  • + I( L% w5 X$ j" }

  •   h% o- }; z1 o. W
  • 4 ^% _& o! b9 S7 m9 R8 B" M( S3 G% f
  • 1 w: [& ?* Y+ c3 |

    $ ^( e7 c. ~( Z" S2 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)$ \' f& C& V+ ^  o1 P# n


) n$ _2 q3 Q/ t$ H  @2 ?) M

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


' U2 A* s/ ?2 D; |% z

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

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

85ef60589d722cb16dd8b268ea80ea05.png

6 Q. j+ p8 U6 r1 e+ m

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
0 X, Q7 X9 ]7 I; P5 c( M% r在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


; |5 q# ?- O  y. R7 [; c0 f

完整代码

( P& s" H+ [4 O2 T: c& J! W
  • 2 w, L" w* c$ q) V0 x0 ^* F

  • 6 U; m( r/ D* p8 t

  • 5 L5 v9 U. I) o) ]
  • : U# v! M6 Y( D$ @8 S2 e* t
  • ) ?; p. L* T% x& f  X1 [; T- m
  • - z% P2 W7 y  B. |

  • % B/ b) l$ U  R! j
  • 5 a' i1 Y0 I, w' ^. t

  • ( {3 j7 C6 e3 R# ?2 `2 C
  • 4 I5 w, }! C2 c9 [% ?4 Q9 r! q

  • 6 e6 r. n4 n+ c* p  L6 Z9 i
  • 9 z2 {4 r  Y7 n% E1 w3 j8 H
  • 5 Z. m7 G3 e  F6 x& D, Q3 E; S7 R
  • % {* C- d7 b0 m4 N' `5 _( t5 W

  • % C: d+ m& `. T6 G5 L

  • # Z' n- w$ F( l. j4 Q1 j0 ~& J
  • 8 n! p% d, a- i

  • 6 }9 p0 q- q" _3 S; ~2 K$ h4 Z# a# x7 I4 \1 x, R* E1 _

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)

, L, G  X! ~) n, w+ `  e
回复

举报 使用道具

相关帖子

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