|
第一步:使用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)
读取数据的代码如下:
' 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
文件信息查看如下:
可以看到,文件的坐标有时间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配合使用。
7 S, b2 `$ h9 y* n# s! K% @
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
% 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范围的数据
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
|