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

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

[复制链接]

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


  • 9 {) I) Y. |- c; o8 s7 E/ h$ b
    2 h! E8 Y# Q) L# n

conda install xarray
3 |! `0 ?- v, M9 f

  q5 ?# y- `' K

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • $ @9 v- ~8 ?9 |: v2 H4 {5 V
  • * o5 @7 S6 ?3 L* O' e' L

  • & J3 |& d7 M* S, ?/ M5 T
  • * _& ~2 A5 n$ z) X( n, ^
  • ; a8 A, c. {! m/ i: Z" [0 @2 p- q
    9 }# i7 ^6 s, [) b

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)4 D' T) |7 f+ p


6 }: @2 t  |9 {9 \* R+ W) V/ v. z

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


5 J, N2 z, Q6 B

第三步代码如下:


2 k+ n; c/ s9 J5 B! v0 y2 c( Y

  • 6 ~7 Z* i6 b- R, ~" o

  • $ h; [% B$ ?$ `( [$ F

  • + R$ j% v8 _' C/ Z: J5 ?' M1 Q: ^
  • 2 D; Q0 c  ?3 N. p  j9 P% w
  • 1 l  `5 {6 e- n+ l4 J

  • * g9 O7 A) ]+ l

  • ' p0 j$ g* O- ^
  • + Y8 a; p  g+ @0 I3 ?' e' G9 I4 w

  • 0 B3 {" o+ P0 x
    & `+ U8 F) F3 l: Z+ U/ X* {: I

#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)6 s+ ?. Y2 E) p$ g) C" `


$ m3 j3 g$ Q4 a" n6 m* A

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


5 O! D0 {; f3 R- }" j8 {& ~

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

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

85ef60589d722cb16dd8b268ea80ea05.png


3 H# a9 r( f( j/ X4 |; k

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。2 V6 X* A+ [- o; M# b, R& l
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


8 z3 N; j5 H/ y# p9 v$ B

完整代码

$ W+ q6 W/ Y3 s: N; u6 v
  • 6 U+ M, a% h; b$ k7 I
  • 3 ^' Y  S- Q3 Q
  •   Y! \2 m3 M3 t/ g7 v9 ^+ ?

  • 7 [. l' D- e+ k
  • 8 t) H8 _, Y2 B' o1 a  x6 y

  •   e: j/ E( d; m3 v

  • " }8 ^9 Y; @# ]! y6 C& K% B! a

  • 2 S; e( \* K9 C3 f# S

  • & e+ P0 j" a; v5 [% M
  • 6 K3 j7 ]8 n9 [4 a/ i( T. z
  • 4 a- t; Y# K- ]- J7 j: e6 z# K
  • 1 W; C, e* B" `9 |& z% M
  • ; S1 P0 G5 A% F9 x
  • 7 K9 g, v4 e# p8 ?8 \  _2 Q
  • & E$ Q1 y, v! R0 ~8 @
  • 0 g  G9 T( l9 E0 @8 k
  • $ |9 Z% t; D8 p: v: y0 M: Y
  • 3 T. ^6 ~5 K- I: i
      |* ^% k, s7 m3 }

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)

# R) u; E' H9 S  K4 D* _
回复

举报 使用道具

相关帖子

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