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

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

[复制链接]

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

  • 1 ^6 O3 v! n% |0 S9 U( m* j4 x6 p
    7 Y7 Y' j! |) G0 L0 N

conda install xarray
7 ^4 V' v. N9 r& }# \3 {


! ?  q) x" p4 N, o3 U" `

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • # m7 f8 u- K! h9 x, F" Y

  • $ Y+ X  X  ^7 T8 c8 v

  • $ {$ Z* V3 [5 ~5 h  m

  • ; l( x. k  ]0 S; x

  • . w( j2 P/ H4 U. e
    , C! V. V, |+ p. \- g, H

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)/ d9 |- Z% T( @8 R


* {1 X3 [" B7 c) p

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

; L5 Q$ q, g0 b$ `

第三步代码如下:


& s6 V0 ~  }. y; b1 w6 U
  • / u/ K5 b% I: U% f9 U$ ]

  • ) g! Q$ l1 Z( d; h  `; r
  • 3 B& |! W3 U! N6 Z

  • 1 c; b. P4 V! u6 s+ v8 I

  •   A, ]/ M; v3 G  N( T

  • 9 ~3 d/ d3 j% j/ ]
  • 5 M- v2 N" o" U9 Y) G9 U8 i
  •   X5 n$ L/ H+ [$ x+ G% }' w  U9 x

  • - @* w6 E1 U6 _# c. z3 B3 ~0 M, @/ {4 j% J5 Y6 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)
& W4 V) a0 H  S) }/ v  ]1 M  z

% M7 Z; F, {5 T

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


; H; k; a# B- c/ J4 M

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

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

85ef60589d722cb16dd8b268ea80ea05.png


9 p7 v* S0 ^; h1 c- g

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。! z8 R* Q; }4 c. P( n1 y: d
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

. l) V1 p" R4 Y. \. }# s' P9 `/ Q+ L

完整代码

( D1 O; @5 M3 a- _

  • ( ]. i3 ?- e1 P

  • % B' Q+ v* x: _( w

  • , E* r9 F# D8 D  A- R* y! w' M

  • 0 p1 c. \$ z: Z* J+ r

  • # W5 l/ q0 m4 B" k0 {, x

  • ' g, n" J2 \! u$ ^; P% m5 o  M

  • ; E0 G& H- P# _( J  z2 ^

  • + q/ R- f' \2 a3 }) G

  • & C; k1 c8 i! t8 L) g3 t' y+ n
  • 5 h6 B- I9 U, u. p  D, ~! a
  • 9 D1 X8 h  k" ?9 D- {' K
  •   T$ ?( B7 B% A6 y( q, m

  • 4 j4 ]9 b. w7 K- \

  • # \( b0 s# D4 V/ g! H
  • # i8 h+ }' v7 S9 g
  • ! K! ?" H7 j  |' A. }" h; A) H2 E+ a

  • , H  f" |4 y: w9 _

  • 9 j& y7 }8 U- G& R6 i4 ?3 o& z7 X. A! ^9 m/ [

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)


* J5 m* N5 [6 s, n* _
回复

举报 使用道具

相关帖子

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