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

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

[复制链接]

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

  • 0 H1 T# P- n; F) Y

    6 x3 y  j$ b" X' L

conda install xarray
& j+ ]+ X8 Y8 c6 ^$ k+ e

5 `. H- o) o) f" K& T9 S$ A; c

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • ' o- q9 U& u; V! N% Z( G) h
  • , B  ]9 l8 [  B

  • - j: p& ?* W- @5 c+ _4 D! d

  • ! }) C8 t9 ]* ^, t$ w3 ?! `
  • ' l- `/ z' ~+ T6 q+ C  L; ~3 P. F
    ' ~. K' S1 Q2 v; C

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 W# C! b$ |- j( o

4 E2 i; a" V, A7 x4 m3 ~! b" T

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

3 q$ w* d& s7 T# p/ l; i

第三步代码如下:


9 ^* H& _8 T6 b: P  u
  • * h$ P7 d8 L& c5 ^% F
  • & n: {7 i3 s  z6 u( W
  • ( B: U# S( a7 A

  • ( x  m, S2 T3 I8 x

  • 7 c$ \3 {  v5 {$ G0 O% F

  • ( T+ \* k  v& B1 j6 t4 c$ R0 ?

  • 8 N2 ~0 E  y. P% t' N4 T
  • & A' T+ z% z( K; q8 ~

  • - V* s8 u- M/ h
    1 w" r. K: v8 J) }, p

#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)
  U% k7 w! {3 V! U

/ u6 d: ?" l% s

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

7 S, b2 `$ h9 y* n# s! K% @

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

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

85ef60589d722cb16dd8b268ea80ea05.png

% k# x4 ]6 X) o8 w1 k4 s

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
% e" B& v9 w9 d* Q$ ?0 }: U在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


2 u+ D. [+ k3 a2 J

完整代码


. D: Q) t' F' P" i8 |6 x" V1 }4 o

  • # E- E$ ~. F. S
  • 2 t, T4 ~0 W" |& C- h' {

  • : O1 X& }; [8 d" g! P9 z" [0 O
  • ( G7 ]) g. v, X) r  q

  • - |/ U4 I* r5 I5 v: t

  • - o+ f. h( S6 y$ {  j

  • # F5 l; t; {2 O; O4 X0 ^4 t% |
  • $ g. }  R$ q+ b: J; q1 M$ Q

  • ( n+ _. ~( L/ {2 b8 `' r; D

  • 3 G  _' J( U  e6 X
  • 1 ^, Y7 j2 P1 R9 ~9 n" p* @

  • ! j; l# j5 J1 I3 H$ S) F

  •   C0 y$ v( M9 Q  k. @  A! _
  • ( W# D# V; @& I0 I, P. d6 _

  • + I7 p) }6 A& I2 f; f- Y* P

  • + G* X( P4 b, v4 M! g7 j

  • 8 L# ]2 \( S8 Q, W( K/ E

  • ) O9 ~7 f# l) s! k! j7 ?- Z0 q% L, J3 I2 m( y/ X. `- m+ r

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)

$ k3 I0 R$ `! w' k, B) T
回复

举报 使用道具

相关帖子

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