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

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

[复制链接]

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


  • % Q: t+ e. c/ C" ?' Y- q7 I7 P- a8 B& k3 H; U* o* h& F& Z& }

conda install xarray$ D2 M! }2 ?8 u  S+ |


  |5 w& k: r; d3 z) C; h; r

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 6 h4 `1 Z4 V3 o" K
  • 1 A( s; t$ @0 H1 n" `* W
  • 1 y2 d, B9 ^. r% O) ^* D( K

  • ; \& K# a4 d/ B: C% j+ [

  • $ W# K( U9 I* f3 V7 Z. ]% R+ F+ a% l- P& B. z: 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)
" R3 W; W+ x; L, v


- l, z$ d( j+ J  [8 ?' i

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

; |, J, L5 O! X% @! Z! [

第三步代码如下:

$ }' Y7 [. x; r" o/ N  z3 d0 l
  • ( C7 d% m; g( }2 |

  • / q8 `4 l, O0 B1 D+ X, C# U

  • , k! `' c7 p* C2 c- l+ F
  • 7 v4 h. \! H! ^# W# g4 O/ b
  • : q3 ?. J4 W; ?3 W! B4 e1 }3 Y
  • % @. D2 z1 m8 ~1 w* I
  • , S3 h! R3 E4 q  e: `8 g

  • , L  J& S1 w# [, Y: c& V  E
  • % @( n# M, F3 P
    5 G0 |2 f7 S. X8 W6 B- C( m5 g/ x

#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)
; m5 S( _) u9 O. d

+ ^$ l/ o1 ~* S' d" L! Y. L

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

: g+ U# ^% ]6 |' d8 t: N

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

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

85ef60589d722cb16dd8b268ea80ea05.png


# P% N2 p6 t! H" ~4 l. }. [

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
+ G% v) e) Q" B/ P7 K+ X* H; b在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

, J) u  G7 H3 v0 v% R

完整代码

* T! _7 W1 E8 _, |) |

  • ' I- m/ s+ k6 F, ]

  • % a  ?% j2 Z5 C8 }0 v( z3 `3 G
  • $ d" u6 Y" Y; ?% S$ ^1 }

  • " ]7 u$ N% n5 P: P

  • / W! \/ U! F1 r1 E
  • ' X; O% R% A& Q

  • / Y' c! t/ O6 [( F. i4 t
  • % f! O) \+ `4 I' ^0 h
  • $ X4 r. e4 a: o
  • . {" @4 v0 a% |1 j3 i: m
  • 6 ~2 {$ f; P3 d8 ?0 {* x8 r

  • : ^! `2 B& s% O" ]+ q# }

  • 7 |$ F. w! K" v
  • - I* o; d4 x+ a6 L7 {# z, m
  • - ]% [, F" J+ Y4 x

  • * t( Q* O5 C! P: J# H* O
  • % t* w2 }4 {! F" k# M1 c

  • 9 c# L/ C, V3 s; @
    $ Y' W7 U3 Y+ V$ I, n# L

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)

3 z8 _! c+ E8 D% \; V6 g2 _
回复

举报 使用道具

相关帖子

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