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

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

[复制链接]

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


  • 5 [0 l1 M' U+ z0 g) @) l- Y  L
    2 K" k0 D; j* S3 Q3 ?2 @3 h

conda install xarray
' e9 G& {9 k) q2 R" `# X0 C


' V: x, b* ~2 Z7 B& m

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • # I5 k( U# r2 ?9 e; x" c: p

  • : }  f: n$ @4 i& n6 V; W

  • + o7 z, b3 G5 r( [3 V% K5 `
  • / ?1 w3 I) Z* `+ n/ b

  • 0 s( ?8 U+ Y4 |" v' ~4 g$ B! c0 [% L+ R  k

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)
7 Z8 T/ v+ S% L0 {5 s9 {% L/ _& c

" t, T+ w# ]; l3 T* p/ j

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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

; X/ z# o8 U* l0 R1 ?1 J& O. P8 L) \

第三步代码如下:


! ?. D8 M) g- n* i4 D8 @
  • : z9 X1 e# ~2 w( T) x1 N$ a" c8 r

  • ' Y" M" k7 V4 b$ T) `$ x( s

  • : S+ K1 W; {8 w# ^1 `$ {/ G+ H
  • 0 C; D( j3 f: e

  • - k& o* o4 {' [! u6 w% H1 I5 w

  • 9 x( |, l1 _5 Q: p7 C

  • ; H$ x2 g1 S6 N

  • ; L8 i9 H$ o# E0 ]6 R# m

  • * N% ~6 f& s0 g  P" K
    % w/ x5 R. y- d* G% f- ]/ a  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), s6 Z% D; [, @0 ]3 `# `& P" }

# Z/ o2 \4 u5 L) h  M3 x

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png

( b6 {2 s$ \$ ?, u+ s6 B% P( |* _& K

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

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

85ef60589d722cb16dd8b268ea80ea05.png


1 T; y* W4 h. |/ K' w5 S

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。% T  S( }. Q3 F0 p6 {
在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png

+ K5 \* N3 C. b: f' l- W

完整代码

) m' `, F5 F- f7 I  D
  • " v8 ]4 X9 w+ S/ y( ^1 F- M
  • % i! X  w# x* f1 K6 H* @
  • % G4 Q5 T# L+ A4 i5 O

  • + P- `4 i& J  M6 o( E0 l: F

  • : ]$ E5 B4 y! B& O, J" e

  • 0 U3 b* s& I: `7 e0 t2 Z

  • 4 Y6 h8 v! l; @) s/ @

  • + @& M8 @; l! U: Z9 D: Z1 d
  • . j( K, r1 O* L# p
  • . ~: B0 B' n  _
  • 2 O2 O9 s: n& ~. J9 E% W
  • 8 x" n; z! f5 t7 M
  • % o2 A6 {2 d- n4 f2 l

  • ! ^6 w* v$ s2 f, f' N2 m' u3 f
  • + A, l- _4 w( a' g* A; n- r' f7 {1 u
  • + Z5 v3 k4 E+ K3 j3 t

  • 4 B' ?- ]2 X9 P- t) A) }

  • ' q* B  ?6 M6 {$ P* T
      h1 [7 y4 b& W% j  f6 R" 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)#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)

' Y/ k- \6 x6 i5 ?" x! R
回复

举报 使用道具

相关帖子

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