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

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

[复制链接]

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

  • ) ~$ @. a/ [+ ^2 R
    ( a3 B  C# j% [+ j

conda install xarray
, n$ [# Z: E4 g  d- p& k


/ g* ]; ~7 m, {

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ) J" A4 e9 }- e0 }% t+ `
  • / w1 h3 \. ^* S; r

  • " S' c* S4 ?9 `1 y+ J
  • 5 g* y+ C' k; _3 e' w

  • 8 }% _4 K9 G, T
    0 ~7 n. s3 T9 g" i- t! n% G7 {

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)
% D4 u  F2 d9 Z9 K; C- P1 z( b

" W9 u' D. I1 V6 y5 N/ A% r& `

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


4 L& a; a( u7 [' @

第三步代码如下:

5 r  d  j' r0 U; l" u, r
  • $ w# |5 n) T& P; H
  • 0 D- _# ~/ @* g& p0 M3 w
  • & O% r1 ~2 `$ w; V$ n  }/ u4 O
  • " D/ w! {# U  Y9 s" `0 X2 o; ^
  • # X- Q1 O, P7 `

  • . K+ H+ h6 z2 {# e8 M" J3 F

  • / S0 f8 l8 n' b: @# e# f

  • ! F' m3 Q' H& x- o1 p

  • 9 [7 y2 n+ O: t) Z! H! W
    " p/ a7 o' c- z% w+ d8 S& o

#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)" w5 H6 G5 E' G4 ^# `" G' a

/ u0 ^2 O7 ]- i* w6 z! F5 j

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


8 K# N4 @9 ?: Y7 a

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

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

85ef60589d722cb16dd8b268ea80ea05.png


% ?- z9 M; j0 @$ k0 x

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
# V7 n, }+ K4 ^8 I: l; @9 j) T  }. ]在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


" U6 }2 b7 ]3 x4 R5 Q# S) ]

完整代码


& [" I* A. R* ~5 t5 ]1 |4 ?
  • * O& Z9 J% D. r# ~) J4 }
  •   L, }& V) s- C
  • ) R. v, V2 Q8 B; D1 n2 Z% `6 f
  • 4 |" F& u% B8 q% g& {$ v

  • ' }( U! v9 m  W

  • + q' v- V% I9 k

  • & B. ^, U  D9 L8 j

  • 6 U0 Y! B- }; V3 m0 G/ {

  • # ^" G0 v" F0 v" K- m0 d( ~/ }* H
  • $ D0 g* z! q# N4 h( H

  • * {& H, N+ y. A

  • * S6 M7 _& P7 i- V
  •   i% @5 R: r6 d+ w' Q

  •   J0 V2 J$ C3 a

  • ) S: }1 r* V# j# l
  • 6 [$ C" K# [# j, x- U2 x
  • 5 I9 Q; O+ r7 }
  • " D9 k5 U7 P" W7 K

    ; G6 {4 }; [" T" 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)#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)


# D2 ]4 g# d7 o* ~; k5 y
回复

举报 使用道具

相关帖子

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