|
第一步:使用anaconda安装carray库: - ) ~$ @. a/ [+ ^2 R
( a3 B C# j% [+ j
conda install xarray
, n$ [# Z: E4 g d- p& k
/ g* ]; ~7 m, {第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
) J" A4 e9 }- e0 }% t+ `- / w1 h3 \. ^* S; r
" S' c* S4 ?9 `1 y+ J- 5 g* y+ C' k; _3 e' w
8 }% _4 K9 G, T
0 ~7 n. s3 T9 g" i- t! n% G7 {
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)
% D4 u F2 d9 Z9 K; C- P1 z( b " W9 u' D. I1 V6 y5 N/ A% r& `
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
4 L& a; a( u7 [' @第三步代码如下: 5 r d j' r0 U; l" u, r
- $ w# |5 n) T& P; H
- 0 D- _# ~/ @* g& p0 M3 w
- & O% r1 ~2 `$ w; V$ n }/ u4 O
- " D/ w! {# U Y9 s" `0 X2 o; ^
- # X- Q1 O, P7 `
. K+ H+ h6 z2 {# e8 M" J3 F
/ S0 f8 l8 n' b: @# e# f
! F' m3 Q' H& x- o1 p
9 [7 y2 n+ O: t) Z! H! W
" p/ a7 o' c- z% w+ d8 S& o
#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)" w5 H6 G5 E' G4 ^# `" G' a
/ u0 ^2 O7 ]- i* w6 z! F5 j
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
8 K# N4 @9 ?: Y7 a
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
% ?- z9 M; j0 @$ k0 x
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
# V7 n, }+ K4 ^8 I: l; @9 j) T }. ]在这里,我选取了40°N-55°N,115°E-135°E范围的数据
" U6 }2 b7 ]3 x4 R5 Q# S) ]完整代码
& [" I* A. R* ~5 t5 ]1 |4 ?- * O& Z9 J% D. r# ~) J4 }
- L, }& V) s- C
- ) R. v, V2 Q8 B; D1 n2 Z% `6 f
- 4 |" F& u% B8 q% g& {$ v
' }( U! v9 m W
+ q' v- V% I9 k
& B. ^, U D9 L8 j
6 U0 Y! B- }; V3 m0 G/ {
# ^" G0 v" F0 v" K- m0 d( ~/ }* H- $ D0 g* z! q# N4 h( H
* {& H, N+ y. A
* S6 M7 _& P7 i- V- i% @5 R: r6 d+ w' Q
J0 V2 J$ C3 a
) S: }1 r* V# j# l- 6 [$ C" K# [# j, x- U2 x
- 5 I9 Q; O+ r7 }
- " D9 k5 U7 P" W7 K
; G6 {4 }; [" T" t
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)
# D2 ]4 g# d7 o* ~; k5 y |