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

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

[复制链接]

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

  • 7 R" Y2 A  N" s5 h  N; b; u
    ( n6 t  S) ^' V+ m1 W8 H

conda install xarray
" _4 j3 L5 A( |( @

5 C' Z% {% v0 K: {6 W

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 3 _1 s% X. L! R
  • + m) o5 W. I$ |. K: l
  •   K5 @3 Y4 }( p$ c& q
  • % i, w4 L4 ^: z5 Y  S1 W( C
  • 9 d; Y3 s) M8 m7 }/ j' m

    / S0 V4 t0 Z' ?2 o5 N5 {/ 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)
8 a' h6 u7 j5 S  j  X6 Y; z6 K! g


; o7 _; N- k/ t! G) L

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

; z# C5 p, B/ X0 r

第三步代码如下:

8 b9 y2 R, v, J4 n' D1 S

  • - M% r' M, ^, A- [
  • 9 J8 @& \& I5 @- z4 d7 m7 |5 g

  • ) O9 b1 G: X) C

  • , `  N' y9 i/ p; y# _

  • 7 S- p3 a7 S. {. [$ V3 T+ e5 N. z4 _

  • 8 u; f+ u# r1 n

  • 5 c7 E7 U  Q7 Q) S3 s0 ^, t
  • 5 X+ l* u( T- F

  • / ^- i, `% b! p" d4 J# V0 |" T& y. z1 x; H, X; a# h. r

#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 f4 v) ?, v5 z* A7 B1 V' _

- e  ~' l" t$ t- \) o

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


  t! u8 ?9 r2 N) p8 k7 [

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

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

85ef60589d722cb16dd8b268ea80ea05.png

& S$ {9 v& ^/ A: F" ]( O

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
" g8 ?6 a4 k: d) L7 Z6 E在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


1 e! p9 @4 q2 j

完整代码

7 R2 t9 e7 f/ Q" R+ |

  • " q) d% @; Y* S; |* \

  • 4 d/ S/ W, Z) y, k3 L

  • # ~% [; J0 z9 E( K7 P
  • / h5 J2 V# h! e) J8 q1 D5 b. g
  • % f% k, d7 {2 W" R- @
  • / d: q/ l" A8 b. Q% ?4 V# R
  • " _) n4 g6 y4 y2 Z& i: D" x
  • % e0 c4 F) Z) P/ o& U7 h9 D

  • 4 m; x; ?* J' j, M$ I
  • 2 O# K2 k* y) h" Y
  • 3 H9 g+ i/ z& G6 j* {2 ?# u

  • 1 |) y3 Q; C' F! f

  • / E2 h" U8 }  y7 |

  • : |4 K8 F3 N5 V6 y* t0 T/ l7 u
  • * u& A8 u8 m/ ^4 N
  • - W* R  e7 n( B4 }9 N" c6 t' j

  • + F8 a  k) Y9 f3 b8 x  H9 o

  • ( z# v; R+ \7 c8 U) \6 C! p, m9 H" [4 E' x& y3 }; i

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)

* N) s( B+ F% h4 A5 i0 i) a9 y! z
回复

举报 使用道具

相关帖子

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