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

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

[复制链接]

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


  • 9 A- f2 p% H0 b" v# u& Z" H5 R$ W0 ~/ t8 u2 D; ]) d

conda install xarray
- I3 W- S# c) \% L  g: S* U


: R; D, v, Q* f) z7 r. n

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ! F. P0 [, w8 v1 P7 M# H% k

  • 7 y, H* J: e) X$ I$ f" z0 x
  • # t* y2 A. L  k& I1 y% c
  • ! p' `$ n1 j8 Z2 k0 ]
  • " t1 c; }6 @  d, A! m/ P
    $ U8 l, ^6 o4 f* u& x9 S7 s1 Z& z0 M/ e

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)7 x" E, C  M$ ?7 j

. o% W6 x# L7 b

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

5 T( E$ n( @( Q* S$ o

第三步代码如下:

# h; g2 q6 f5 s% q; g& e
  • - h% G' |. w$ D( P

  • & `- I% f0 [' _! g. [1 x

  • * ]9 q6 H, U/ Y# D  B! M

  • ( t% t& n" Z- p" H$ ]% Q' b3 w' V

  • 6 T& d( ~6 }8 [( A
  • 0 O9 V" A- U" ^' j+ p0 @" k
  • ( q( K! i/ o2 a$ h0 L2 T

  • / I" C% k5 M8 L3 d/ l3 L

  • 9 t+ w% G0 j$ W3 [0 D8 R
      |( P( D- E) H& W6 e. n

#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)* M4 K8 v: @1 i3 X


, T$ K6 k# K' D& {# ~

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


8 t) [. L) j* ?

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

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

85ef60589d722cb16dd8b268ea80ea05.png


" p/ r+ y! g: W% i

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
% x1 |( Q  o' F* V在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


, j& a$ Q) a5 ~1 K' _+ X8 D

完整代码


( c2 O& i' z( U: w
  • 4 ]& A: y: G7 [4 @  B# v' U' l

  • 1 V. H' n& x  z$ \5 k: l
  • " U6 E8 |2 {+ A- l, x* g( i! [& m

  • . b* j0 N. d! h) t; k
  • * X0 P# S( x5 T, l! P) g

  • * u& c3 E6 r) U- B

  • ; H- N: B! D: h) k# ?
  • % U# ^  @% y5 x+ K' ?

  • * M! ?" s' O; s+ l: _8 Y: K3 s) q

  • , V# h+ \) }! k) l/ B( p
  • " a5 E4 X- M1 H6 x  n
  • , y" J' _( o/ L; ^

  • 7 v; M  D5 p  r7 E' F

  • # X: ?5 Q* G; S- c
  • - K) |2 @& ^% P6 h
  • ! n* ?4 S! J/ i% F6 |4 n
  • # j. g8 F' {7 a/ S) X. L' [5 {
  • / B3 X& s& f( c2 B6 W

    3 ?4 j( s/ j$ 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)

+ G8 T+ A! C  G9 M. I6 E! a
回复

举报 使用道具

相关帖子

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