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

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

[复制链接]

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

  • . s1 A" J: O  [  z9 b
      j& N  |% L2 K5 E

conda install xarray
3 l% @4 J* `$ _3 L

# o: U; r1 r2 I! B

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • $ y" u& X9 t8 ]9 o2 c7 Q
  • 5 P9 S, s: z* a% l5 o8 n1 t, z( E. }
  • 6 Q+ e/ I7 T2 d
  • ' e. `+ x+ Y9 z: B, s
  • 0 S) J  G2 t% m  n# j! d

    # R2 j, v0 ~! ^

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)) p& e0 ^0 K+ O9 i8 x$ Q4 j  f% |


; V- m1 {! B8 a0 c! X/ Q. i) q: Q

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

+ v% i1 |$ t- }+ U5 o7 ^; W: _& |

第三步代码如下:


0 G: P1 L; x. X1 G$ i/ F1 d* _9 Y8 j

  • 1 J; E$ p: f- t4 Q0 P5 s

  • 2 G3 l2 R% @; g, }7 W
  • ! A1 w' E; o) s* A) A% b- o
  • # Z8 b' t8 T5 A4 |- ~

  • , q' O8 Q3 g" V- ~; {# F
  • $ J' m# y' A3 y' w' V' @

  • , X+ ]5 I+ k* j- I  J! g4 v) v1 h

  • * O; i0 S% X! ?4 g/ Y

  • $ k+ Q+ O4 F9 S" h- ^) N1 j& G. T  I2 N  L7 r4 @

#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)* z1 p8 A8 ^& g8 u+ T# f


% S. r2 F+ R( Z4 p2 a

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


2 v& D$ b) F* @* B

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

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

85ef60589d722cb16dd8b268ea80ea05.png

% [% r- T$ p0 _

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。1 d: h: \' q/ }
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

0 M, I4 _7 R2 u9 {  ^1 M/ W( i  P

完整代码

1 S# m1 l7 C& t7 F& Q7 g2 ^3 b* |
  • , ]4 G. n  n3 k4 A

  • " I. p! w) a% |; C; P

  • 0 R0 g, J7 w' _, R) h! G

  • . `3 ~  E# L9 @" c7 E2 e8 C  j

  • " ^' @7 _- R$ U1 F
  • 1 ~) ~$ `. R% R
  • 4 r1 n. z; D, E2 I7 o

  • 9 p* Q. c9 ~+ Z9 a* [
  • % W  H* J. m# m$ q& h; L5 W3 N
  • , E5 p* |6 y" f& x

  • * \( W6 q+ Y# G0 u" W
  • , j* Q; c' t7 k
  • ! E0 a9 d  Z# z# Q8 A# L) Y' |5 W/ y
  • ; O6 N( C5 Y! j5 ?: Z6 A
  • , u  t1 U- L3 v; o* I
  • 0 X1 d; s. J& c1 C3 M
  • 1 G' {# @3 d/ m* l: n. K3 B6 K
  • * o: G6 o% W, P1 ?; [
    : K  w1 s- ~% g& ?7 W4 C3 {, N" p

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)


- h! I% P6 g' N% K$ [
回复

举报 使用道具

相关帖子

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