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

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

[复制链接]

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


  • . T# T8 Z. N' Y% S- o0 l2 u
    1 A* M5 y# Z4 [: J* i( \, a

conda install xarray! D9 k. }2 b; j


2 v5 l/ Z2 }4 m

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 0 y$ s/ \% q& z$ ?9 ]

  • ; P# [/ @. ?; V  Y' |! S! `0 a7 P

  • % Y  p2 m2 T, j' ^* n

  • / p, L1 D1 B7 z8 |' K6 v9 S
  • - z3 n. W7 ?# ^/ S. v5 m: f

    & W# [9 D5 j9 g

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)+ U5 ^+ |) q& u$ h1 q7 O* ^% y' n


: T3 E4 B4 a& c% O0 t5 U

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

& J* Y' x& D0 o, I6 B

第三步代码如下:

* Y, O! C# p- O

  • * w5 T5 B' f  z9 N

  • 7 n/ H% J- P- {! Q$ p
  • 2 V; r7 F& `, R7 R
  • 2 J7 i" }1 d( P

  • % o* F4 ]" j1 n% s2 ^; B4 G  E  S
  • 8 ?; D1 Z9 A$ l7 ~

  • % X. m# N3 @7 ~1 e* ]6 f: D
  • 1 `# B) p9 q! s" N  j0 Y8 j8 c
  •   U( e0 Q; A# A( ^" t8 c8 ?

    ; C+ ^. C- h* J, z2 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)
% ~, I5 w! x! O% Z8 \6 K

" {+ P1 d$ f8 `2 G5 G

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


' C1 [# y; }; I" t  @

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

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

85ef60589d722cb16dd8b268ea80ea05.png


  z0 @0 d: T% z5 h6 H5 f

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
8 w* K2 g& K" j7 P在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

( d% o) d1 d* R! n

完整代码


- {! f& l5 u& o3 B- ^0 a) x$ W3 D6 g

  • 7 W: Y% n" W- Y; m+ R

  • , x5 s, w1 |: k3 E: R* t
  • # r4 L" H1 J. T) A7 I3 D2 \6 c/ U
  • / H' p! x+ Z+ {. H2 ]
  • " I7 c0 ?6 `# i% M0 r4 N

  • " O& M' j& Q' v7 B4 ~$ J

  • / b* `' @, p  r' m6 S0 H+ \0 H( I& Q
  • & s8 p  v2 N4 y  k+ S$ q' ~
  • # C* ~3 O0 M; t0 X: N

  • 1 i6 g; k+ G8 t4 f0 @9 [

  • 1 B; s0 e& P0 g

  • 1 W7 [- m: m$ T
  • ) O; B% B3 v4 t; I" l

  • ) S+ [" _7 w5 L: V4 Q! Y

  • ' `; W" x- @' B, S$ q, c9 n
  •   n- p; m  U* y

  • , A, l1 T  p5 {* a! O) m
  • 8 l6 T/ C4 D$ ]: q* w6 n2 H
    , N9 Q* p8 C8 @1 R6 W# _7 I8 r

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)


3 `2 n# ]- P5 W& p
回复

举报 使用道具

相关帖子

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