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

[复制链接]

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


  • % f5 w9 @6 {8 u$ I
      V* e9 `0 x; F& G/ P5 j

conda install xarray
) y* ~( V3 t3 P' r- R' j) `1 k


2 g- E6 }1 a8 _$ l# P# I3 r+ f. l

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ! N9 U1 v2 y4 u9 ]
  • 8 n& M" e9 g8 C) G

  • 5 h5 x* {  N4 W! y: w

  • $ l3 p0 J6 E9 r5 \! l- X5 J, k

  • 3 \. p$ F3 H- o
    8 k# g$ A, D# F

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 q6 c8 X* n( @, A1 I


7 u, {3 l; ~) s9 W2 [, Z/ [. y

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

$ n+ p" X4 i0 @8 ~) n- C8 `! @  C

第三步代码如下:

  K7 r+ f/ }" u( b6 H
  • $ T3 v' B/ f$ |2 a5 N+ P( W! D

  • 3 |  s. u9 p; f1 |- k2 \
  • ( F  P2 h0 @+ P- ]4 \: ~

  • ( l: H5 G  \, U5 U
  • , x5 E2 T" p0 c- g0 g
  • * y( i) E$ L' v! o

  • + r( k* s9 s# o
  • 5 c  A0 d- V- K7 J
  • 7 F2 l8 l$ g5 e  d, H' _& t: r
    " @6 K# m; C4 r6 i; e7 W1 h0 o& p

#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)4 C& G, n& X- l

, j8 V$ g. i" \& v7 l

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

$ A1 w% q2 F5 B) W0 A4 k

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

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

85ef60589d722cb16dd8b268ea80ea05.png


) k$ w. C( _: |' N2 V, a% {

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

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

ba790cde36edf774adba4d7236ae5bae.png


# o5 a" e& D- y  u0 Y  ]

完整代码

4 s) f5 p4 A. B, ~
  • ; u- }. _6 R& }$ Q

  • & Z9 h" A6 y. u- T  K3 ~3 C

  • , `$ _3 a4 `- k/ O

  • 8 l( o+ r$ s+ n; K3 v6 D

  • $ ?4 R8 }2 ^4 p' k9 T+ i* R5 l
  •   m  p  B4 E2 E# G. b, R

  •   g  d4 Z2 \. F) ?6 U

  • 1 B% U& J7 a  x: ~5 T) R0 Y4 I
  • ' D' f! s3 _$ o( m  k! X' M
  • 9 e4 |7 r* Z7 C- G9 Q( k3 D1 E* B

  • * t1 t2 w! |5 f

  • $ b) O( U- y% R' P0 V7 u! N4 N& O7 Y$ W

  •   P* f5 F9 H, @- r$ h0 n
  • 3 S% g& u0 J3 h+ A

  • 7 `$ _! e' D5 ~& C( ]: I6 D! K
  • 1 N8 b: c) P6 @* q2 h( h

  • % F* \/ v7 p2 f; j3 B2 W+ J
  • / t. F2 k& T/ g; V, ]! e

    * r3 B) U) K7 S0 [7 `( m1 L" P0 a

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)


8 l  h4 p) H4 y7 P% n- k8 Q7 O
回复

举报 使用道具

相关帖子

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