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

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

[复制链接]

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

  • $ J! D0 R% I1 r# q

    1 c5 M" ^! V: {9 y4 D+ D! q$ o% F

conda install xarray
/ ^- S4 X$ ]* t


- J1 q& u/ N% z  L7 d0 H

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 6 T/ `1 U6 E# E/ v2 G
  • ) Z$ s& r4 Q/ q8 ^" Z
  • ) r' G, U2 |8 Y6 ~; L+ }1 n
  • 7 A! n# N! z2 P9 s7 Q& d
  • 4 [* [% L( v% J% ]) O5 g
    & G1 G7 f( |1 P! }  F$ j3 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)
& R7 ~# ]8 o. }; @" A7 m: W, `8 q

' S' L* D+ {2 i. L! H

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

6 Z5 e: C6 _4 W0 y6 Z; _

第三步代码如下:


2 o, y4 O9 [% I
  • . K& r8 g- A2 ]. R, o6 P, X0 g
  • - g" U5 X& |' ^) f

  • * d0 k- K% H# v7 x, [) r
  • + ~/ V6 u) B* ?: x6 W

  • . ?5 f. W" [+ G9 D- d( O4 K7 ?/ K0 U& w

  • : U$ z3 d) S. \9 B; f
  • ) r2 t; }9 M' n  O& T5 S

  • 2 g( W$ K% m( u

  • 5 Z( T) `. U* D1 I. N. M( G1 U7 G3 L/ d5 g# N" K. V

#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)( c' N' ?- c) T  i


4 c% n9 C$ q5 w9 J( m$ y, r

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


5 p* P0 [- P& L$ E  k  d

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

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

85ef60589d722cb16dd8b268ea80ea05.png

# P' [& B9 M! j$ ^

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。# ?# t# x+ Y; y- M# o7 {- }
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


& K. y) @  d6 @( a7 b" w9 q

完整代码

( T0 d% N: h7 J' D0 T5 c
  • $ }) b; j5 h; ~; N5 o
  • 3 Y3 w# k) J7 k# t/ O

  • * D  N& [* w9 w+ B
  • # O- _0 x: h' U7 X: Z& M

  • / O2 O" f9 x0 ~* a8 j9 M

  • ) ^* r; z1 X. C8 x
  • - p9 p& |0 H  `

  • . |5 Q# |( h/ \6 }0 A

  • / j0 [( Y! Q5 r; n! p; h1 p

  • # D6 N# u5 D% z) t5 Y

  • ' C) S; I* a# G" t
  • ; A" y1 ]7 u) \, |. f& p0 D
  • 1 S' D, [: c( Z2 a

  •   G4 f* l' [1 }4 {
  • 2 g* b0 Z, u: E  `  _
  • 1 s4 H4 J0 a& D0 p6 b0 X
  • * {" b3 J& D+ c- Q. Y" W

  • & Q1 D- m/ z' m) f# d) D
    . x2 w( A' n4 H" g

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)

2 G+ b7 d; \6 E- n2 N3 z  H4 Y
回复

举报 使用道具

相关帖子

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