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

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

[复制链接]

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

  • # x) }* [( f2 s$ }( v7 Z
    ( U- |( q5 u1 O/ P2 p, G

conda install xarray
8 P& D5 @. ^( J9 W: ?8 r

8 G$ H! P; w  M/ z

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 7 m, I6 a. m, N$ p& c
  • ( ~' O6 y( Y( [. S1 a

  • 1 c6 U. J/ O7 A3 V) g7 u& {0 ?

  • 3 l7 @6 D  ?7 v0 s9 P. J* O! a

  • 3 x4 G  _- H+ Y- K( v5 [  H& a& d# n
    0 D. {( i6 v+ D! u6 H) y, N9 K

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)
" b9 D4 n; S/ W+ X4 `


' h- i7 {# ?7 x% m' W! _

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

5 f7 e9 K, `6 o. w3 U2 L8 W, ~

第三步代码如下:


$ O  ]& J1 V, W5 ?# M
  • ) L( t  H( w/ v' L7 u6 f

  • * J# l6 @- ?6 k0 ^8 ]; ^1 @8 `

  • 8 M1 W: Y2 r3 P9 h

  • 0 G( G2 ?  P( T! c5 q1 \
  • 3 c& a+ c7 t7 b- X0 h
  • . w* l2 H& ~- _* _$ N+ i: i+ o& @
  • 7 E; M7 k! |' @( o, x" f
  • * D9 M; y8 B* ~
  • ' y- ~6 k  v% U9 V. D1 N

    9 o7 C" ?. R0 L& u1 B8 D

#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)
( t7 p, m/ U# Y


" H, {0 d+ E9 ~# G$ A& f& n

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


6 v; f+ B1 ^" g4 M- {* X+ E

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

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

85ef60589d722cb16dd8b268ea80ea05.png

% U. r- }5 R" n8 z

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。7 t* o) H8 c) y
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


5 |2 A+ ^; m# l. V$ F

完整代码


" M/ `. k9 e4 U+ Y$ Y  D( D( [  G% _0 W

  • 8 v2 t& o9 C# w: c

  • ' t( M+ X; O" v- Z6 N

  • 8 c, t# O" |. d  m" y, S
  • $ q  v! J9 A2 T) ^) _
  •   t+ v% w( {: J3 A: D, {

  • 0 p) [& Z/ n, U. `

  • # G, O6 b, B; P5 T

  • 0 k# I/ Y& W: E7 P1 Z
  • ' c4 d7 g/ N  K3 ?. _  A5 m( X
  •   G; D& c1 o% {7 }6 P6 S

  • % A- y# t* R# i) W4 p0 {: L# w
  • - A3 {' ?/ ~3 A; `& @

  • 3 B( \; ?# v2 M) T, V

  • " w; J- S% b% T( \0 u4 `7 j: O+ X
  • 6 U. j5 F9 y) T! V0 H8 H9 R9 p0 B
  • - k9 F: T- T2 u. ]# J5 h

  • ( S' H( C, _& S8 M

  • 9 E5 h- i& d# Y1 p
    . K0 ^% ]; }  k" }" 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)#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)


5 F; g( `4 h- o: }7 t
回复

举报 使用道具

相关帖子

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