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

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

[复制链接]

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


  • - w% E: g; c& E, e6 f$ u3 {' C

conda install xarray) |6 `: t& ~, z- x* T

' L3 w( i& E7 {

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 3 R2 V3 y! F, F4 O/ n% m
  • 0 ~$ \' D/ O/ O9 d. d) P3 z

  • 8 g0 N" v* D& F
  • 7 c  j4 J. G7 c! }

  • 0 v. i6 h5 e" Q/ O: I, F0 \2 t
      k: B4 ?# _- u5 V) D" J4 V

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): S; Y8 `$ ~6 f


3 b  g) Q6 }, B7 G  t# @

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

! n, h. R0 u/ b# w) o& e, }7 E

第三步代码如下:


7 q" Z2 k5 ]& b! b
  • 7 a% Z; M7 J+ M" b- \" z# m
  • 8 E* }  Z5 y1 |  z+ w5 T8 r

  • 5 A9 e9 g+ ?) Q- i
  • ; i' {1 @' Y2 E( @" S$ A: x

  •   b; S8 c. M3 G
  • 6 l: g* k6 e' `9 C$ F- z
  • & l3 x5 o$ n7 t7 [1 k0 o7 u

  • 7 U6 @8 g, [/ J6 F

  • ! @8 o' n3 g, t6 P+ u, V/ Z$ ]9 M! M; b; Y. q7 J& i! p& i

#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)  U# G2 {0 S' P

& ^: I! [3 O% A4 |! D

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


7 ~4 ]% ]( {4 A; W4 ~9 x

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

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

85ef60589d722cb16dd8b268ea80ea05.png

7 N, u  q/ f1 T  k) Z

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。5 Z; W) ?+ `4 g  [* u  p& i' a
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

( u" M- P/ Y9 V2 z9 a& }

完整代码

6 R  k% `2 X! N* Q
  • 5 B" A( L1 [4 A& ?/ h
  • 1 u, a+ g* x2 o+ l. w; ?' E

  • ! v+ S2 f- D+ u1 V- |/ m. Y. s/ Z5 a

  • 1 ^3 g! ^" a9 X7 x* [
  • 3 s/ T% S0 H; A, T4 E( r$ k
  • : V; V, @$ L* ~/ ?

  • * d. ?; y: I2 |" u8 y

  • , `7 Q0 b: W1 O0 D6 M( b$ ~: D& r2 v
  • 9 o3 s$ R4 G3 X/ Y5 U5 ?/ `- l
  • : u& y& I9 w: v0 _  J" m& N

  • 9 R( H( D0 Z, `2 ]- j
  • , w! q$ I1 ~3 j: [; b

  • # a( G( j7 w# m/ V6 r8 g
  • & r/ M7 |& s% x, ^5 _9 N- j
  • 7 l+ b" g+ R6 o2 v6 N6 a2 D5 D: o
  • 3 c  ^# N7 \8 L) o" p% `

  • 6 u) h, U" J% e/ I8 U/ R& @

  • 3 y) k2 b; z3 p- I/ l+ |, T+ S  F) ^$ x4 @3 N! |

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 b) ^- `- B+ a9 V& ^0 u+ U$ W
回复

举报 使用道具

相关帖子

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