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

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

[复制链接]

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

  • 4 i( e8 Y) @3 m3 C0 ~
    5 T, n" N' V  z) T

conda install xarray
4 u7 O2 z4 O% B# `4 ^/ B


# D: O% M4 U, V: q" ]9 B( p/ z

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • & W8 I) h! C( L. a' m+ H8 ^7 t
  • ! Q5 f$ R- t' o! \  P8 L! m6 s

  • 9 X# C0 Q6 y$ H% d
  • 9 S7 x5 X$ ]. J8 g7 ?! I0 A

  • 7 m$ L5 ^: h3 E' H( J3 }! N- e" O$ n1 b6 i# ?/ e: \2 d/ S

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)
5 v  z+ u  f& f- c  N

6 e3 d* g, g. p% {

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

8 e4 W( W2 f. O1 [

第三步代码如下:


: u! F* w) y+ `3 |

  • % ^7 g) k5 E5 a6 J0 \! l2 D5 g: n, ~

  • : N/ X/ a$ V& b# |/ B

  • 0 D2 O" X; u- u
  • , v+ S& \/ ]  [5 B3 g7 A0 k1 J" }
  • 6 a# [9 q% N$ |0 ?: z1 s8 R
  • 3 k7 V/ h6 X) v# o6 U

  • ' `8 i8 S0 j" p' g; k

  • 7 L# U; R# Z! y6 [

  • / k6 |0 N* n! A; Z
    0 T2 L, L; p: J

#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)0 c6 X% P5 W9 h


( w6 C- `: [( _7 p: ]1 W

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

4 s3 I: k% w4 q5 z

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

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

85ef60589d722cb16dd8b268ea80ea05.png

: Q* _# X4 |3 |4 s, O

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
! W$ r% D; x; S. x) W( ?$ i' y/ ~在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


6 b) K" n+ w0 F

完整代码


2 A# U) d! r( B4 f7 f5 R. s9 [! M

  • ! H4 m) _7 d8 `% ?1 o

  • 9 k( j4 r) y" l. U' f5 @* A
  • , @  A& o/ |4 m: W

  • * y' m% f' }7 X- b  z

  • 2 R% K. m! F& V
  • " M) N$ c2 _  ~$ j# }6 _
  • + r  h2 c& S+ i- O* f4 y0 t
  • 2 p- p, [) g3 ~4 a
  • 0 l- ]1 V4 X! [

  • : G% }$ z; a& N9 V
  • . g" d. `  z: {- n3 G% E
  • 7 w/ L& `, t' K, q0 S/ ]

  • 4 K5 c( \& \# ~! Z: I
  • # G' e9 D; V+ {

  • - l' v; G7 ~3 P5 c

  • * M. m6 n5 c1 [6 v) D
  • : b  `4 }% ~3 h1 p

  • 8 [9 K, s: _$ C1 `
    5 y5 R! ~! I6 w9 @( ~8 A

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)


* _4 J: X9 O: E
回复

举报 使用道具

相关帖子

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