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

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

[复制链接]

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


  • ) N: |7 b5 V  o% K' {) `; {# f, O; ~0 q1 I- }

conda install xarray
; S" T$ i( p/ k; b2 f; g* ~, q9 ]


1 h4 W: ]" N1 w/ {9 A

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • % i- J0 H, ]: c1 T* m

  • 8 x2 e6 ]2 |6 v" ^5 {7 U
  • # _; R( h! @% m$ `

  • 5 b$ J- M" S5 ^% x# G
  • % }/ [$ J3 Y% ?

    ! ]' Y/ W2 A( d9 L1 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)- n9 l0 E- O* d& l

; t! P9 X3 L; H; `/ M

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


: c# q# i7 d, B9 T  ]. B

第三步代码如下:


! t0 Q, |+ X! }2 d& ^
  • * u# v% r( l1 h  C+ {

  • 4 R5 U* B, n+ v/ T! [
  • + w% m8 H) ~; \& L9 I; s) k* Y

  • ) ^: @9 y7 g" m9 [9 |
  • " Y2 m- S6 {( F# U/ p
  • & C3 c9 Z; i2 M0 o3 A4 M
  • ( e" Q$ X1 h9 @: Z2 @% L" l
  • ) n3 e. U/ e  O8 j

  • ) U8 P0 s/ H+ r4 e3 O
    ! j; b7 L: V. 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)/ e' |) B1 o: N

6 B+ Z4 G" e) N2 D

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

, Y+ P- |" @- a" W- l

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

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

85ef60589d722cb16dd8b268ea80ea05.png


9 u4 h5 B) t3 D

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。, S  p, e- |* o/ p
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

: R5 |' H, j( D% J$ E$ J

完整代码


  P  z3 X* h  M" c
  • & d* w7 e" l5 A
  • 7 M: h  t/ _0 e: f
  • 9 E) h- r' Z: G" r' N
  •   R  ~. {( I2 d! Z

  • " I  @* z# a! @! C( w# g
  • 7 P2 f4 S2 z( p
  • 5 ?+ \; f5 z  z  I2 J5 @

  • 9 [0 F3 O3 {" p  q1 L1 ^4 L9 }4 j/ g

  • - H% ?: s7 m& w0 I, ~( U" k' P3 V$ B
  • ! G( G( M/ p- V+ E/ A

  • ( H; t0 m) n( L0 F
  • + R& b; x( [- E

  •   t. P- R& I% P; H  `4 I  W0 \0 F: c

  • / V/ B5 ]! k8 h$ k' \

  • 0 H4 H' o9 ~. U7 a* \2 J

  • - {9 L  x- h6 n: i

  • ! E0 H: ^/ U8 ]6 S: \; Q* P

  • 7 E9 M* Q) p2 O4 b5 c6 F- i6 M# X  t5 o& Q

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)


( v# {% D$ c/ o- M
回复

举报 使用道具

相关帖子

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