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

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

[复制链接]

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


  • + \  O0 d6 S8 ^
    % T/ y+ A, i# e; i

conda install xarray
3 |4 S* H$ j* B& T/ d


( s5 X& o. P3 C9 j( I$ T

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ( K/ V# k3 g& B

  • 9 d, y- k8 k8 d, E
  • ; e- c) _- }+ C/ w* Q1 Z

  • : n* t( i7 a: b) ]9 Q

  • % V5 Z" a+ z1 i, d& ~+ X8 g) z1 p0 L" ]# k

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)
1 ^/ `9 E* x8 d, F& Q& s


& ?% b! t: E+ u. Y$ M; j) g

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

5 P# @1 j9 @  \' D& l& U* y4 X- K) ]! e

第三步代码如下:

$ d' I' r9 R) L! x. g# P
  • . Q5 V6 r# _/ T

  • 6 N  k" S* @" a2 o$ u
  • 1 D, O" i0 I9 Y5 _7 m

  • : y: A: x& a, {) t
  • # t' o  ^# C. x6 b

  • 9 s  [3 U+ o$ i$ q) e3 C: P
  • , T# T8 H' d/ V* M5 F
  • * P1 u" G) n& i3 ]! N
  • + J, r  P4 u* |5 [2 P% a; x7 b

    0 x3 c# b- h* W. D

#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)% {7 T8 Z3 \8 C0 P7 b9 Z' {- x


8 z( [- Y3 u: Q8 c. D) i5 ~8 d

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

  l6 {' ^4 q3 y" L6 `9 R$ z/ o

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

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

85ef60589d722cb16dd8b268ea80ea05.png


& i9 s: x4 Q* E" i

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。' u) k0 U0 a* p! p
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


$ }' T" c' D2 y6 t" f+ q! V

完整代码

1 N! t. e3 j* U& v3 ?

  • 4 V1 F6 `9 K/ K2 G  P/ Z5 v
  • & v/ Z. D3 \: O. Y

  • / ^/ }1 a4 l# R

  • ; ]9 Q( i0 h0 `9 V3 U) L

  • 7 ^& H" O+ A( D

  • 6 N3 M" [  ?3 t( u9 x
  •   {& I& \. I% w9 Z; A/ m3 d
  • 7 F5 x% T1 t7 n0 j" I  p% h6 Q
  • ; r% d9 V  U! p" j5 J4 Z

  • / S* t9 p, |7 }6 }) W; _

  • % \7 {, Y8 d; K5 i

  • / G/ B- S6 H6 N  d' G, ?8 D3 d+ U

  • 7 d0 L6 |. ?5 Z' u5 ?  |

  • # O8 S) L4 d. b& V) _6 d
  • , p3 i3 {6 f- j9 e; G5 D3 h
  • 5 T) n' _' W5 m+ @" ]
  • 3 A1 n9 S4 `# F3 Z# ^

  • : `! T( o6 @/ V
    ( F% Y5 ?. |- n

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)

7 v/ p0 v% W, C6 w
回复

举报 使用道具

相关帖子

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