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

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

[复制链接]

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


  • 3 G4 h. H3 f1 J& R' B! m+ n0 Z7 ~! s8 b

conda install xarray
* o2 O$ f, @' p' U


  L( F& G: ?! j& n1 G: \

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  •   ^3 L) A0 o. a$ L  c
  • ! I2 j/ q! x* T8 n1 ?" P. f

  • - i) a4 ?  J! I: J9 x% F

  • - k. W) I) C& E& \5 X" ]

  • 4 a+ G. B4 R( S  n" Y0 A
    ' Y+ |! Q2 H! e3 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)7 J0 ]" S% k/ b7 Q& H9 I


. `, V0 b9 y% M& H+ C0 Q# v

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


3 C- F' E& F0 B! H  O: n3 z

第三步代码如下:

+ ]+ n; Z5 g: m9 s

  • 8 Q; d% C( ?7 G6 m" M: B" f
  • # r& B# |& y3 j& H9 ^( m" @

  • 4 D  J0 r- b. }6 y# X
  • 2 {6 _9 s- g7 G/ w
  • 0 t- [; ^% ?% V- K6 Q2 O

  • + x( p- `; P6 K2 s
  • 9 _/ _; R+ o* t% `* t: t
  • ! P" h6 W$ m$ T; f1 R4 ?
  • # Z4 A/ y; l* \7 y( Z

    0 T+ t$ I0 |; N9 _+ _* [5 \

#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)
  Y* u. s- I9 U+ v


" j5 h) s5 ~( i3 V% R( |9 C% [

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

. \3 d$ ~+ T% W" [  D; N

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

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

85ef60589d722cb16dd8b268ea80ea05.png

9 {8 c% ?4 V4 Z  l7 x+ t  _

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
9 |1 x0 i8 X. q% u8 y在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


& C4 m7 i% F7 n2 y% o  |, u

完整代码


; R/ \6 a8 M6 m) d, y! c- b! U

  • 9 |1 k3 ]* |2 p6 _

  • ( C/ K- ^0 |; z( o1 m% y$ }

  • 6 H  N$ F: W# P& [9 }
  • 8 H* c( L2 Q! }, z" L# D9 L

  • ( o6 t- X7 V( Y* a
  • $ _/ c; r+ ?7 `" ]$ n

  • & [' Z" s" U5 A* e7 j& H
  • & e! N1 U7 x$ i9 H' f7 g
  • & P5 ]' k- o2 y7 ^& ^5 }! o( y

  • . u( f9 A  |$ ?0 d( b, L- J

  • + i/ C; O4 n0 x- k# P

  • " R6 G' H( n+ U

  • 8 ]  _" _- ]. Q% A- B; @! O

  • 4 J; q3 i1 U, t# Z5 t: y& q
  • 6 F& _: l/ W( q) J* O) ~) V2 ~& Z

  • " P+ o' X( d8 \& l  U/ K

  • 9 O) o# n/ z5 H$ T

  • " j& O7 g% f* w
    * u9 K7 a7 o! f* X; P: K8 b

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)

  m& s! E4 }2 ?' I4 j+ l  x
回复

举报 使用道具

相关帖子

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