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

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

[复制链接]

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

  • : X; ]7 f) K0 X# u
    6 t' e6 p: w% o; N

conda install xarray
8 t% N- u. h; }


: M8 z* l, c/ R! L& Q4 \

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • * v0 w- U) c$ p
  • + f0 H8 M# z9 w1 |6 K& a6 f
  • 4 f) H! ^9 f3 U2 R' C, h, w5 P

  • - n) c  C1 m! p% R, Q* G& l) i
  • 0 D( X& |8 z6 c" s8 i2 f
    0 o  {% a5 i; C8 p; K9 z  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)
, [# p# l9 t8 R' ]1 D


: G6 g% b6 b) w5 s

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


  X5 D, t. l! d9 M

第三步代码如下:

4 O; x4 l" i: Z5 J0 ~7 I5 |

  • 5 {1 K1 H" E% |& e* h4 G+ r( l
  • % O: ^" U4 x: \7 ]
  • 2 M! X' }# W! p' M& p( F

  • 3 ^( e' B' J# B
  • 1 j. d2 a. s7 t
  • # ~2 f/ G3 O0 V! n; P! x
  • : H+ \7 N' M! ?& n* ?$ E7 V! X

  • $ p5 Q- I. h" z. L1 x" l

  • 4 i: ], m8 S# I9 ?) R) U$ J6 A5 P! s& u3 w' w1 D/ u* N+ G- `

#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)# ?- E, Q& k, C, Q. ?

- T# ~. ^4 J. F* T9 ~

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

% }0 u7 G' A; j# w5 h% ?

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

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

85ef60589d722cb16dd8b268ea80ea05.png


0 m8 K1 X6 ^* ~4 p$ |# U- C

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
% k: c  E, k" N% B% H3 f在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

0 h. e5 f7 [7 [$ u: ^

完整代码


- r. Y! L* d1 i9 q8 T
  • " m/ |3 n( _5 k5 W) L
  • # R) z; a8 _  k% \' |+ ~7 _# f

  • # x9 N3 n# p* t  |5 ?' Z
  • ' m  L/ s8 V+ T' S) }
  • 3 }1 U1 P8 C( N+ v" S$ `5 ]
  •   T( J5 `8 f- P6 Z
  • ' p3 m5 Y: G5 X. a& \
  • . ]+ u. C$ w1 t' `7 L, }+ r* }

  •   a" ]* l2 o- ^$ V- @+ p2 t

  • , ?- }5 t, ~: Z, N2 T6 k- ^
  • : t+ K, q* P9 k! p5 b6 a

  • " O4 y7 X2 x7 x7 a. G5 O1 \$ Y2 h

  • ! n0 {6 a9 R+ C# Y" b0 C
  • ) V7 R6 M8 z; V' F
  • 6 N1 X; `+ `- O7 z: }" O  G+ s1 J( D+ x

  • ) u  r4 P- m" Z" I- f: U

  • ! S2 d. n8 Q. N

  • 8 W3 p: D7 F6 P1 a$ ^% e+ r8 z# |. u- U& Q! E/ s

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 K7 a9 n& p" r0 d. m
回复

举报 使用道具

相关帖子

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