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

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

[复制链接]

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

  • / T8 i& v) i) U! V. d

    ' L8 e% O5 |) Z, S; ~8 b: ?, f: A

conda install xarray3 ]% p8 b# c, H+ K& W2 d

- y2 ~/ t4 S/ ^4 H( x3 j) L& M

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

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

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

70eab593d5e1ffcc5e4c9c5ba54c7cc6.png

读取数据的代码如下:


  • 1 A7 J0 i9 B. E9 E& ^

  • " Z+ e" n& D/ E# ?, T' ?

  • / b, }! X! P* g" m

  •   g  [/ _" |- r1 v
  • ' q& _1 n7 v. g' L$ d

    + c# H( c/ K6 n$ A- Z/ B6 v: Q

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)
2 M0 `, w; }7 e) Y0 D3 X7 T/ l

9 f" H8 N9 `8 j8 x# X+ Z

文件信息查看如下:

1a1e28f7de9c02c666ed97dbd5fd2a72.png

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


4 ^8 a0 n8 G1 Z" y

第三步代码如下:


$ @% _& k2 N" I8 S( g  `
  • 7 P* P7 v7 R, |8 f& Z2 q% r6 i
  • 0 K0 c0 m) H  c4 _' }' N( B
  • * `4 b0 ]. ?! n) a8 a

  • 4 S1 P  b$ Q- r. U+ D' f/ t+ g, V

  • ' L, U. s/ _4 Z/ B% v

  • 5 E' ]& D+ ?/ ~2 \0 m8 i% {, t
  • + J' \' }, l3 p9 a/ g6 \& E  k0 G
  • , {! C8 V! q1 S/ J  |8 u; B  Y

  • # K8 [, I/ P0 y; l4 f% t8 b( i
    + m4 q0 k' E: T

#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)9 b9 g2 B! o5 T! c


* z1 H- N5 V- O4 J: B) b) O7 Q

第三步:气温数据取出

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

b734e9c3ef1d31eb57c86b0e8fccd28a.png

31cd26cb3c6d63f21fa456836a062042.png


+ J) ]+ O0 e, Y0 o5 ^3 I$ X6 \

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

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

85ef60589d722cb16dd8b268ea80ea05.png


7 e7 n" N" H% d$ V7 p- i  `% G

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

当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
, \/ l% A; J+ D( ^- h: @* t; m0 R在这里,我选取了40°N-55°N,115°E-135°E范围的数据

ba790cde36edf774adba4d7236ae5bae.png


1 U/ m: A! c) ?) n

完整代码


. V+ d; N/ W* S; W6 O5 \1 B
  • 3 \  l0 w9 E6 k+ X  S
  • % a6 @$ w  r* }% @7 i9 J1 ~9 Y

  • 6 E# [; ~3 u; e  c" ]

  •   m1 h2 N4 K/ B$ h3 J

  • , \* [+ w6 ~9 T; l9 y. ?! {& e
  • ( u" ?: q' u% l6 M% C7 K
  • / d4 V6 ^7 l6 V3 L9 V4 H& V% m( U9 s
  • , v4 B: v0 p& y' h
  • 7 ^( v$ W' B, I* \
  • ! ~+ c& o1 _) T: `: I) o8 T

  • 4 j- ?7 K2 W8 ^+ _# O) ^

  • / i9 u% L. e, C% t- p7 z7 ?: \! }) p
  • " [4 D- Y1 m- l" f# E

  • ; w" y! C: z6 R- _2 A- t) x

  • $ z- o. V" O. T# ?6 j* N/ B& ^

  • 9 S! |- z) |* W$ W
  • 5 S- C- {! H, o5 v+ x4 n5 }0 o
  • ' m% n% z9 Y' V& Q' B7 [" E  v
    ! D8 {. T% F8 C& s: V, Q

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 ~$ d4 t! D5 E8 Y
回复

举报 使用道具

相关帖子

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