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

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

[复制链接]

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


  • % f. `, b! I! d: S0 K0 g' ]! S8 U& y" H1 `0 X3 w; Z

conda install xarray
; d" s* c0 X- k. X3 [$ _- Y


. _6 w/ Z; N7 p/ u8 V

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • . O( {4 A4 E! u

  •   ^3 \1 I* s& r8 \/ v0 x
  •   x6 {0 \; b/ V$ X! K

  • : j; X- V% s4 s

  • 4 p. p+ G& o6 g/ t
    1 O3 M7 d6 @& ~/ u  K) u; x

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)& J. v$ l5 X/ H/ c" E6 D( a


0 G7 ?# [9 _. ]2 P/ W9 k

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


4 B, {3 k4 y- c. ~, ^

第三步代码如下:


) @0 ^& N) r) e/ V
  • 1 P/ b) I  {* r& _) [

  • ! B- @. w6 K7 f3 ?

  • ! j' G5 k  ^' {2 U- T1 L6 H

  • ! e9 \3 p1 L0 E* `8 F2 S0 I8 L
  • & v" l) K& c6 s

  • * @2 e2 T( P- p8 |7 t0 T
  • ! x6 s" P( o& A1 }8 z
  • , b/ Y2 F) N, k% d/ K

  • . F, X8 U, U- l& b8 A7 [$ r/ l; \1 T7 p$ ?8 l! U2 s- Q

#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 B" p# \( A) c$ K+ q4 R! r, n! w; x8 w


/ i, T, _, p% P& ?% |$ d/ v; N1 F

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


' Y- z# u7 d" C! c

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

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

85ef60589d722cb16dd8b268ea80ea05.png

1 L2 ^( y) \. ~; N( k( Z; E

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
4 f" J. t& A, B: G在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

+ i+ y1 r0 \  c( ]* Z% Q* I

完整代码


- Z! I8 d- X% n9 E, `
  • - {& O) T4 P4 C" ]! x) V! w
  • ' @9 @7 n- v9 @- Z- N

  • 2 c: m5 F/ n) D+ h
  • 3 ~) @1 A/ J7 y; V" P9 V) B; ?

  • ) R: _8 j0 q( a1 O% t+ F

  • - ]1 I; x9 n) q5 L4 w7 J, k

  • 3 b8 k% L! D+ E2 f

  • 1 P* `  W: K4 H+ @' ~/ f% n" r5 c

  • 1 V% L9 V2 K8 p# Y

  • / H- b% i0 O9 ]* |: j0 L5 f+ V
  • " _( C# G1 d2 w

  • ) [5 q0 P% D' W7 M) d
  • - Z# u! |$ @* L! G4 G

  • 9 Q0 }7 Z3 t5 [: n6 i

  • $ l4 v* \& E; {. {4 [$ N

  • 9 T* j6 C+ ~" U; z# C( l1 s+ j
  • 4 n3 D: b3 ]- c  V3 V# Q2 B- J

  • $ \. f( k/ S4 p; ~  f9 h% r% F5 i# V0 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)#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)

% w* V6 u3 ]* W% {1 g5 R/ \( P! h
回复

举报 使用道具

相关帖子

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