|
第一步:使用anaconda安装carray库: - 1 ^6 O3 v! n% |0 S9 U( m* j4 x6 p
7 Y7 Y' j! |) G0 L0 N
conda install xarray
7 ^4 V' v. N9 r& }# \3 {
! ? q) x" p4 N, o3 U" `第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
# m7 f8 u- K! h9 x, F" Y
$ Y+ X X ^7 T8 c8 v
$ {$ Z* V3 [5 ~5 h m
; l( x. k ]0 S; x
. w( j2 P/ H4 U. e
, C! V. V, |+ p. \- g, H
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)/ d9 |- Z% T( @8 R
* {1 X3 [" B7 c) p文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 ; L5 Q$ q, g0 b$ `
第三步代码如下:
& s6 V0 ~ }. y; b1 w6 U- / u/ K5 b% I: U% f9 U$ ]
) g! Q$ l1 Z( d; h `; r- 3 B& |! W3 U! N6 Z
1 c; b. P4 V! u6 s+ v8 I
A, ]/ M; v3 G N( T
9 ~3 d/ d3 j% j/ ]- 5 M- v2 N" o" U9 Y) G9 U8 i
- X5 n$ L/ H+ [$ x+ G% }' w U9 x
- @* w6 E1 U6 _# c. z3 B3 ~0 M, @/ {4 j% J5 Y6 D
#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)
& W4 V) a0 H S) }/ v ]1 M z % M7 Z; F, {5 T
第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
; H; k; a# B- c/ J4 M
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
9 p7 v* S0 ^; h1 c- g
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。! z8 R* Q; }4 c. P( n1 y: d
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
. l) V1 p" R4 Y. \. }# s' P9 `/ Q+ L
完整代码 ( D1 O; @5 M3 a- _
( ]. i3 ?- e1 P
% B' Q+ v* x: _( w
, E* r9 F# D8 D A- R* y! w' M
0 p1 c. \$ z: Z* J+ r
# W5 l/ q0 m4 B" k0 {, x
' g, n" J2 \! u$ ^; P% m5 o M
; E0 G& H- P# _( J z2 ^
+ q/ R- f' \2 a3 }) G
& C; k1 c8 i! t8 L) g3 t' y+ n- 5 h6 B- I9 U, u. p D, ~! a
- 9 D1 X8 h k" ?9 D- {' K
- T$ ?( B7 B% A6 y( q, m
4 j4 ]9 b. w7 K- \
# \( b0 s# D4 V/ g! H- # i8 h+ }' v7 S9 g
- ! K! ?" H7 j |' A. }" h; A) H2 E+ a
, H f" |4 y: w9 _
9 j& y7 }8 U- G& R6 i4 ?3 o& z7 X. A! ^9 m/ [
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)
* J5 m* N5 [6 s, n* _ |