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

[复制链接]

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


  • . m/ }4 J7 U' S( G" }+ q# W, C" H! C3 h7 L

conda install xarray
1 L) Q. \5 ^3 a0 a  y! f" g3 N


  ~6 ^. R8 Q- ~9 \% M- F& {( ~& R

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • , `# k1 O# F* j/ L$ C" {

  • + S% z( ~- x( G7 B0 G& ]

  • % _' x" y4 l9 r- i7 b+ G" z& |

  • 6 M3 Y( @& }* x1 T3 O
  • 0 G7 @- k; e8 m) g

    3 b9 ], W. L# 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)
) b: {' m* ~8 v1 k4 h, D" Y


! D. e; b/ G0 w# H' a

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

* D% r+ }5 W  R, L+ R* [( S& `, Y9 J

第三步代码如下:


# _% f- X0 M: J
  • 9 W, a# ~. l. d* ?
  • ' ?, f9 X* t* E; {" F% B5 t5 I2 D

  • & z# U. Y* b4 R- j  @3 V, H

  • 4 h* T$ {: A& _. i# V! T
  • + G+ Q, [( S% T6 z

  • 3 y7 \, Y3 c' W% G# E

  • 3 v( ~9 S9 C  q& ]/ S

  • & N, S9 J* J3 n3 L
  • ! Z$ P# ^# R% K1 _' f9 M6 v8 z1 \

    6 @  j( D. E" e$ [

#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)
2 K- @4 A1 s/ ^; o

' P8 w$ Q/ l* m2 X! k+ i, U' L

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


0 _: d. G. C- I! O

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

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

85ef60589d722cb16dd8b268ea80ea05.png

* J, t, M& B; A" ~8 x/ f9 ?) b+ x% f

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。/ C+ `. e: b1 S$ Y, x! M2 V8 d
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

" n( ?" T3 T1 G. N! \

完整代码


& @" C, F& Z) l

  • : m0 S7 ^# j( ^. l4 P8 l  i, R

  • ' y7 @& L3 p3 y+ V* {$ z

  • ! g* @3 b- i1 I; D5 Q

  • 0 y3 Z2 u+ d0 C
  • ! s( h5 P. x0 T- R' z

  • 4 ]3 S" y- G# E3 t  J) I+ K

  • $ C5 c( F" q7 k! p7 j7 x) e
  • * p" n3 ~% i0 ]' f% k& n) @
  • 6 X3 _9 G0 G: R- j/ a1 @% x4 o9 A
  • 0 [: `/ r( K7 E$ Q5 W
  • % P2 x: d, A' d! P( x! }1 {
  • 0 g8 u6 j8 Y. b9 c- c4 ^" A* C# \

  • 3 a# V9 ]; z  x# V4 C- M/ z/ Y
  • 1 k; i/ H4 q! l" w
  • . x) v' b" g- M6 C5 [
  • ( t/ e; P+ D2 M8 y7 c1 \4 |- ]

  • 9 M- {- C" T: C
  • - v2 \$ f4 L( H- s: O7 p

      O; }, ?$ H! g  l7 N6 P6 o

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+ p; ]- D( V9 W
回复

举报 使用道具

相关帖子

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