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

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

[复制链接]

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

  • . L6 m" c* ]( _6 T9 s3 K) V

    # R: Z6 l2 _! P% I

conda install xarray
7 B/ o: }5 U3 E

4 O3 Y8 `" {7 C! z

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:

  • 1 d, F- f' j3 k( E; g

  • , d9 ?3 u$ ~: d7 _- t
  • # i2 f6 X& B% N. {
  • 0 T' F) E) O( j: z' h5 Z1 C7 i

  • 0 }" O  P0 E" S6 q% T" R- e, [0 P( S& ~3 ~- R+ C1 G

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)
4 J' S( `1 U' ]% a& I( {0 U  G5 ]) X+ {


: l' \( {  R6 K, I

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

. Z0 o, {6 V3 {+ p) @

第三步代码如下:

* h: j! `# J# b0 j6 O0 u9 {
  • " G0 t1 Q& N4 U. h
  • 6 a6 i; c. I; ]( a" {- K3 x
  • + E/ u/ V/ F% F' \' V! F7 m

  • 4 {7 V7 x3 ~. q$ W* F8 c, w" f* ]1 h
  • 1 q  j$ K6 r: f! ?. h

  • * _4 I. `8 P+ G1 E, o9 c
  • 7 {1 _$ @9 |  F, T2 P  Z
  • 0 Y5 \$ [! @/ s, W) |' M
  • 8 }- G# m5 a( p4 g1 j5 d

      p8 i' |: a! D, P1 P+ M  ~- F7 n: s

#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)( |% S2 W( o* d5 K


6 @) n, G2 {' Y, R

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

. z6 h# G9 t( V- q3 k8 [: x; [

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

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

85ef60589d722cb16dd8b268ea80ea05.png


' B5 J% V% N4 r. q8 E+ S2 J: g

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
$ Y1 l6 W- F8 {/ }! b( E在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


1 E( K- g6 c- O

完整代码


( v9 Y7 E0 i% Q! ?
  • 8 c! x) m( P9 q0 x5 U2 S
  • - P( R3 _5 g1 B4 c& F8 n& M
  • . C2 U- [" R+ j; ^8 [2 U
  •   t- ]0 E/ L% m4 E2 w" M

  • % S, X- ^6 {. X9 [8 ^8 O5 u

  • & W% a/ M4 [5 n! y$ y8 C+ \

  • % N* K& q& @" F. v% q

  • 0 S( }" x( ]% z; h2 q, c& K3 @
  • 8 z0 V  H+ M: d& i+ q7 j

  • ' l* @# `6 S( S! b7 e6 T
  • 6 @- Y" E: d. }! N- P( ~

  • ( f( p/ k: ^1 j- N$ y4 y
  • 2 p) O# ~6 `, T. e) s1 V1 l9 E

  • ) Z; y- a( X8 {* V9 T( S' k; C

  •   z3 z  f) C9 d8 c7 z
  • 3 Y* r5 H( T' i3 j. K4 Q

  • 2 n( n9 \  M* n- u, ]
  • . z% V, q3 O- F/ b
    0 W; W1 r7 r& i3 x, A1 V

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)

6 {! R  I6 ~# J
回复

举报 使用道具

相关帖子

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