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

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

[复制链接]

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


  •   _+ p- j# Q, H9 `( B* `9 A- _* p( j
    " `; X; ~+ @) q2 d1 j

conda install xarray
) n: x4 `6 m' [5 P5 x


! g( b, C3 ^9 G  i4 L1 O0 G

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 8 E# }# j8 E% U7 X

  • * @4 n. x0 l/ n

  • ! R0 u6 B8 N6 t: i* \
  • 3 N  F* q2 t9 f9 |( p1 i4 K0 j

  • 0 F  x3 C! ]- f& c
    9 k+ d; \% F1 R* E/ {( T

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)
0 n7 F) T1 B: ]


' ?% b6 p+ U' @

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


( R3 I9 B; q0 ^7 u% R

第三步代码如下:


& e0 i! m- b' S/ G1 n* h9 v

  • 4 s2 i0 U! B+ q# P4 M- [( Q

  • " l6 h: s* C/ G
  • + n% S3 Y3 U, r8 @
  • # W/ b; @* H' f( E. O

  • $ k$ q3 o+ D6 T2 x, i* A
  • 2 T! D% v) k/ ?; X3 A' a
  • 2 O$ \/ N) x2 g
  • " h3 H( }4 F2 x' U/ S! Z
  • + i5 Z9 s  r, X" }2 F; l& v
    9 V' k0 v, V7 L

#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)
5 j9 i" G5 _& ]: S$ \" p


) d4 a8 J4 h/ Q

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


. N, C2 f* W1 ^5 G( E! b  f* [! w

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

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

85ef60589d722cb16dd8b268ea80ea05.png

- r. K+ ?# e$ T) T

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。0 u( l( P' O. T- v+ G# T
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

* k% K% m3 j+ h) U1 ?

完整代码

1 D4 ~; p8 Q( N; U- C
  • ; Y% r9 e* j/ v, |
  • 9 J% G7 F8 B# ^# \  E
  • 7 U% C7 z! t& X  C
  • ' n  S' }& y; E( ~; M9 }

  • , z, b% N! D' W$ [; Q& j

  • ' f* M& ?4 l- T

  •   ^2 C+ R. N3 p# k

  • ) f1 H8 x6 d" c% k- }# p
  • 4 q( Q# ^$ g% O# W

  • 0 `( q9 n, ?; @4 O- s
  • ' M7 ~' U- ]7 v7 `7 @+ g5 h

  • 9 T& R. M' \+ I; @9 ?# Z+ v
  • 9 w. p1 ~# K! \% i! I* v- p  a7 ?
  • 9 t8 y9 ]' P  E/ m6 A

  • / c6 a" _' o% N! L+ n3 l3 V
  • $ q% G$ y  z& |) Q" u( L2 ^

  • 7 c7 o3 q0 N. `' r9 V

  • / Z# T" o( M. i; \3 p# t% ~8 ]: L+ M" Y

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)

- O; {7 j3 s5 w$ R% R
回复

举报 使用道具

相关帖子

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