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

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

[复制链接]

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

  • 2 s" }5 Y, @5 u
    0 M7 ^6 A) Q& z0 V3 F9 k- T2 P

conda install xarray( X- A" ~) Z* Q/ f" l  Z/ q

/ f% Z2 Y) y0 }* P$ c

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • ( r1 f7 ?( }7 z6 n5 ^, M1 Q. H
  • + `) O# T+ K* e' x& V3 k# U

  • ) p/ B0 ]. F3 V# Z
  • 1 K9 c# H+ @+ I; v3 Y- h

  • : L9 Q/ {+ y. i, D, g# U, |" k! _4 V- Y9 O7 r" 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)
: [1 f. _; R) h6 n


7 E7 [# a' V+ `- Q

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


% n- O% L8 d9 [+ v3 @6 j

第三步代码如下:

3 Q  d3 S2 K5 y8 l
  • ; E9 L& q$ W0 _6 A/ o- [7 u& g4 J

  • $ i/ S8 }" W; V5 }( y

  • ) ^5 e( I& R/ R) d, o

  • 4 x* O! w1 N5 A: g
  • * S9 _7 O% O3 x* u+ R

  • ) w. @0 m) N: c+ h0 r' S) N
  • # |; z: K+ h: U. q$ o
  • ! S  L3 R  y1 C

  • 6 U% T2 }. N  l
    0 }$ ^6 ^% |* {/ c5 o6 m9 B( h

#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)
0 f2 @8 K. F8 j" z/ D$ B0 p

3 l/ {% M. C4 g% o6 m

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

: w5 m: q/ U4 ]4 {- P

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

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

85ef60589d722cb16dd8b268ea80ea05.png


% L0 C# ~) U3 n7 y

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
+ \1 o. d, E6 w在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

6 F- ~8 \( M- n" W$ v

完整代码


& c  ^1 o' v3 e

  • " c/ D2 F7 E- E0 y( |

  • $ B1 \2 {8 z: ^# N; R! Y

  • ' L* z8 l# t& ?( G/ p

  • ; k  v) s6 C" c) _2 c9 y; h$ L: x

  • 4 X- [, z7 ~! F5 X" ?" A

  • ' v, ~8 N8 m5 B+ s

  • 6 c0 O3 M- H6 k# n# k! U
  • % R# g5 C# J- `( h: ]. ^7 H" m4 L
  • 6 M/ K. Z3 J0 L+ W- Y, v

  •   x7 b% |6 m1 @
  • : ]7 N; n% P' F$ D" f- W: o

  • ' g, B0 H6 x, X; r7 a& `! `3 U/ `
  • " X' P6 F) q! k9 e1 W

  • 0 x" X4 o, C- M1 N) U/ r

  • 9 b; }, X/ j, L

  • 8 ~" d5 F3 j" `
  • , l1 a4 s+ K) X2 M
  • & P8 G9 F- b8 h( i- B
    3 Q0 U2 K7 ?; q1 I

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 D/ c6 g5 a% @& ~1 s" e( ?
回复

举报 使用道具

相关帖子

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