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

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

[复制链接]

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

  • & U( W& Q5 `. B& {9 I- V6 v$ }: a
    : ?. o' U$ r7 |' k2 q9 v$ e

conda install xarray) a' N6 A; q& O1 }/ a0 _4 P


9 t8 E7 Q& u/ |. u8 _

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • - w' ~$ x/ B" F% C

  • ' S/ |* r. i9 W4 U

  • . i$ w5 b- d0 R4 f3 r

  • $ m3 w# e: Q6 q4 o
  • 8 s" i0 h- O$ }2 Q) m% O- @8 X

    9 h( m+ L7 K8 A) H5 C

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 s9 b. A- \8 v. l1 T0 g: X

9 V' `, ^, w" ^6 V. _

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


' S7 W! O$ d, M! n9 L. M9 r& u

第三步代码如下:


9 J' \9 i0 D3 T

  • , N! h/ ^: [) B( @& i" B( ?$ D
  • 9 k7 J1 J1 P# D" v( D) v! P

  • 7 }. J. W2 Z" b$ O4 h

  • ; Y( t$ `. [( K, C6 l
  • ' h7 \  \$ D7 H; \7 N& @9 ?! i
  • - E4 u3 C! F6 f: p7 j

  • 9 p1 |5 l4 q; H" @7 ^. y+ Q9 _1 m

  • - ?/ c7 g% f5 n

  • 1 k6 e$ J( q/ k. _4 g
    " Z( Q7 P0 L0 b& 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)
0 T7 G8 u+ N  F8 J- ]* q


# [9 ^: D7 @# s8 h

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

/ I( b( S9 G  u+ h

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

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

85ef60589d722cb16dd8b268ea80ea05.png

6 T7 L( N9 ~- L, P* _

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
6 ^3 d; J0 q$ i) N- g在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


. U: j3 f/ l/ B* ?% K" G

完整代码

6 c$ ^: N! D; I1 X
  • ! O; ]: A4 ^: D$ R! @6 U, [; Q

  • ; b6 s  t2 U6 r. R: z2 T- r

  • / N6 e$ v  g3 [% ]% h7 X7 }

  • 5 v3 Z- B8 R& l- y7 X5 ^5 c
  • # Z, Q5 g+ b) c& K. Q

  • ) E0 X' ^) Q  e5 p7 Y3 ]

  • - U; v% P; v( R2 M; A& Z

  • $ I* {# @( C$ U! @7 C+ r. M1 p
  • - P4 o: _5 j( e$ z3 B9 q; I* m
  • 1 c% @  `& u. I7 G8 K

  • 2 \& g. U  p% x: Z- }6 \

  • , P8 x$ u9 {6 U0 c9 u1 {+ g
  • - {9 w% P4 h5 T9 s

  • ' U2 `3 f7 p/ F  X
  • * U' t. Y* U5 j$ f8 f7 O
  • ( Q3 y+ p4 L8 v+ a+ `/ }
  • 0 r" y0 ?# g! a% Y" @( V1 h# A

  • & y% k% }9 Q7 O9 n
    9 n6 _( e, J* d* D" A$ 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)#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)

% [1 p( _7 K2 @3 Y: k0 W9 B0 w
回复

举报 使用道具

相关帖子

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