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

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

[复制链接]

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

  •   a4 Z+ K/ m1 d( W7 ]$ _6 A

    $ y; r" X9 t$ v/ \; S5 u

conda install xarray
  J# Z9 D! v- Y; K

# L2 K4 G/ N) O5 [- v! l. t

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • , h' y/ d6 ?! L  ^
  • & T2 R1 w- B* Z3 m& f; A6 h

  • - T/ d. z8 }( p" i6 U7 W
  • 8 P. a. ?& A  ]+ f5 t% G& q$ X4 b) l

  • ( o8 |8 }- i! @4 m% p7 U" b2 a5 _# f* D

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)
8 h% i- G$ S# z' T  a" K( f) X

2 R5 R  f. l% }$ W% c7 q9 }( j

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


- E# l# i' e7 J' d$ V! H

第三步代码如下:


3 d9 u! u' t, ]! Y! U, Y" E" }) g
  • / b# w: `8 ?, C

  • % X: d2 W# a% X0 f- [' x

  • " {6 x4 i! s) @- ^
  • 9 P1 l: z( n/ r1 t$ ]8 c

  • 8 j3 R* `( w9 l1 m+ ]8 q! y' |
  • ( `. v! X5 C6 W) j

  • ! w6 i$ p- i! N' t3 H3 N7 c/ a, t1 r
  • 3 G1 F( c, F& n0 w1 l7 c$ X

  • 1 l6 `. F% q5 E4 K; }) V4 T+ J7 ^

#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)
+ j$ |  @1 h( C* _


* y+ n# v* r8 c, h6 ~4 W. L( _

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

" S# Y, h8 r7 m) u/ x

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

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

85ef60589d722cb16dd8b268ea80ea05.png

3 x1 D% z# M! v0 F2 V0 d

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。8 r/ i; g8 r" Z6 a3 `- w" H. a
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


4 _& J+ k. r/ b

完整代码


; z+ ]9 q. ~; f& o

  • . t; W2 h8 e% r. s# Y
  • # j1 W7 f+ I8 {! B

  • # @* p& d" n. O/ i" b* ]
  • / x( p+ u; x- |! C9 f8 A: N
  • " a; c" z. z& j; ~- s* u, G+ _: e
  • # A+ x6 m+ W7 U& A) f( i2 r

  • 7 c/ k! l2 N3 Q4 E
  • 1 p( v- V9 u  i6 D, w5 N

  • 7 S; X5 g8 j% N! U. V5 Y- f
  • " }1 q* l* H& T5 {. a
  • $ N1 S/ ~6 y3 Y% S  u1 w- T' H
  • ; q0 S9 h  Z  G8 G

  • ; `6 W6 i+ B  ^4 o

  • ' [  }" n' R+ X7 t+ I: G9 o1 w

  • % `( _% S% I+ n, a; Z- H) ^7 G

  • " q  n9 }# v  [2 [, v+ s# v
  • 8 f9 ^% I7 }( F- b, `0 E. x
  • $ [% Z% d; ?$ O/ _/ P1 y9 Q
    9 ]7 n, ~  y8 L

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)


3 ^7 ?) |6 \# {/ v' V- }7 G
回复

举报 使用道具

相关帖子

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