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

[复制链接]

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

  • & i: f' r4 Z6 u' u* B4 b5 x5 M8 y
    " f" J4 R  S7 M8 v& H

conda install xarray4 D( m' i. d7 x$ p


/ O0 C3 r2 \9 t$ q  }2 [$ m0 s

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 8 [% C5 w% d9 l$ G. i" F% ]2 [3 ^

  • ' z9 P  \( A( {5 G

  • # Z* `6 I0 M) G* K3 f# ~' X
  • 2 Y: ]7 i+ M; y! r$ q

  • + `$ |; }. @( Z( d5 |( \! h
    * V5 }- I1 @+ A) J/ y8 M

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)
9 o  d, J1 O0 n


* E% J7 ~6 r6 ^& O3 d% R

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


# W; w' H" W) V2 P& S* @9 T& g4 a8 T

第三步代码如下:

% q! }+ V- E/ X% h) Q
  • ! ]  l, {2 Q/ ~" j/ q  T

  • 9 @  T1 ~5 w9 u: n  K; |+ x/ r

  • % F, q3 F! x+ L3 {7 j/ A3 `- M
  • ! s: A$ D* w/ e! a

  • : |$ i0 Z6 _/ O( F& O

  • 3 ?- N: Z8 n, \8 r

  • 4 E* X/ Z1 ~0 g) x. a- A% J

  • ' ^/ E' N0 @* ~$ ?3 V; ^9 h
  •   N" o0 \0 z) |* |* Z
    4 @0 D+ x5 M  ]" D! j

#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)
0 v, i9 q2 Y, {6 L3 L' _6 `& ~


( I! Y9 I' k( \% K" r

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

% L* ?0 p% f* J. f, v

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

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

85ef60589d722cb16dd8b268ea80ea05.png


" [0 [5 _8 |7 I

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

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

ba790cde36edf774adba4d7236ae5bae.png


% Z4 K4 |1 A( n& l0 B; I& V

完整代码

5 n$ m% o* Z# m& u9 R
  • $ W1 J9 X" v: \0 o# I6 n7 k. m
  • 7 `* Y; l) v# ?' L8 L2 \, S

  • , }$ j  S8 G/ i' ]
  • 3 A1 I9 q8 t% l8 U( O

  • * L8 ~/ M9 a8 I, a+ g

  • 4 g8 W' R& B/ j; [( B
  • * l- g* s, R. f( Z4 A% X- I- L! l6 \
  • 6 L1 ^$ Q$ U5 q/ R8 D3 ]

  • + l5 I# V) t& A% {

  • , n; p: f9 ]( U4 |' J; K1 z
  • ' ^5 q! B7 }* N
  • . ^8 i, Y; J4 F/ J/ Y  W0 y' s
  • 5 ]- y5 y9 U* ?

  • ' ]) j0 q. q8 O- K
  • . ?1 {' i: ^: H  D0 V7 e
  • 4 p  C. }* P, H8 E* J4 P9 Q
  • 4 s4 f. s, W. b* `0 ^
  • 2 [* a, f- ]) N8 K* N. \4 m

    8 b' B5 {& A$ e/ J5 }) 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)

, |7 I: t. F) T- o0 N+ y. j
回复

举报 使用道具

相关帖子

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