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

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

[复制链接]

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

  • 6 D. I! [# E( K9 O7 z! ?$ t

    * a4 `0 e) Y- a1 ~  l) P

conda install xarray4 p9 u" `1 V, B1 \' `

! G3 ~; R2 F; B+ g

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ( y2 A$ q) I! ?  S6 {% n& q5 I

  • & i/ W' L, o+ p2 J( P+ r+ D
  • & `! }: H% T6 ~7 z( I
  • 9 F$ J! ^, i7 G! E, {  n

  • ( J/ ?0 y4 T0 f% s  n0 @6 d% a4 q
    " O& y4 L6 m9 v+ 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)$ }' P! ~) y% U$ H


8 d2 L+ |% d& B

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

7 q, J1 a: j) l- g

第三步代码如下:

/ t+ a; f* D# p

  • 9 b, m& t9 K" v8 b) T
  • 5 `9 [( `4 a" M" B! a! m' j0 Q% V

  • % X: b6 O: L2 a4 ]

  • + C+ A4 n3 `; c9 m; j9 u
  • 6 C4 o* I, o) N& f& o8 H
  • ! a+ v& {8 K! D( E- r5 X( l0 {  _
  • . Y/ ~( z3 ~7 P
  • 5 H% s" z0 P4 z, R5 Z

  • . w: b/ I. m9 f9 u$ H. j$ V/ }$ K7 l; \5 T0 r8 j) z: p2 V

#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 G+ B  {4 o) Q/ H+ \9 t

: F* S) a6 o' _' E! t7 V

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


9 m* O" ~2 l+ Y5 E

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

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

85ef60589d722cb16dd8b268ea80ea05.png

2 v+ K; w! p; @

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
+ s& |3 C+ o' U7 ~在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

- ~  }1 k# C; x7 q( N

完整代码


8 N4 g% E% L9 c

  • + A2 _- J- l7 H' u# H
  • 7 s5 S- v/ W# x+ v: S
  • . j9 s) I( Z0 q6 _. T$ c

  • 9 {0 G0 I& X. {/ i; ]) P* l+ B% n

  • : C. R, E* y# k  X) l4 s

  • $ z- |  i+ N: }3 g: u
  • 3 q* J7 l' Z% M+ S4 ^: K9 F2 F3 m
  • ' S+ q) ~' I0 x% T  l  i

  • , C- i; ]3 M& C& ?, |

  • % w, E* ?9 E" A  N2 d2 F

  • ! `4 a4 i9 t; I" i

  • . G# ]7 z( ]" r+ H, {% O  E
  • & t' q+ J) |6 W9 k+ t0 L
  • , F9 F& d# ]; v' v3 d: P/ v5 v( u

  • ! b" q' G# a2 o, e: |# k6 d

  • " g, z2 U# i9 u# I4 Q. ^' ^1 F
  • ( e4 B0 D. x" j. i; |6 J

  • 3 M1 Z+ O5 H5 }$ P1 j, G' Y3 F# n+ S( n+ B1 C' g7 s- ^/ s; 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)#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 B( W" S+ O7 v
回复

举报 使用道具

相关帖子

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