|
第一步:使用anaconda安装carray库:
_+ p- j# Q, H9 `( B* `9 A- _* p( j
" `; X; ~+ @) q2 d1 j
conda install xarray
) n: x4 `6 m' [5 P5 x
! g( b, C3 ^9 G i4 L1 O0 G第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
8 E# }# j8 E% U7 X
* @4 n. x0 l/ n
! R0 u6 B8 N6 t: i* \- 3 N F* q2 t9 f9 |( p1 i4 K0 j
0 F x3 C! ]- f& c
9 k+ d; \% F1 R* E/ {( 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)
0 n7 F) T1 B: ]
' ?% b6 p+ U' @文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
( R3 I9 B; q0 ^7 u% R第三步代码如下:
& e0 i! m- b' S/ G1 n* h9 v
4 s2 i0 U! B+ q# P4 M- [( Q
" l6 h: s* C/ G- + n% S3 Y3 U, r8 @
- # W/ b; @* H' f( E. O
$ k$ q3 o+ D6 T2 x, i* A- 2 T! D% v) k/ ?; X3 A' a
- 2 O$ \/ N) x2 g
- " h3 H( }4 F2 x' U/ S! Z
- + i5 Z9 s r, X" }2 F; l& v
9 V' k0 v, V7 L
#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)
5 j9 i" G5 _& ]: S$ \" p
) d4 a8 J4 h/ Q第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
. N, C2 f* W1 ^5 G( E! b f* [! w
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
- r. K+ ?# e$ T) T
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。0 u( l( P' O. T- v+ G# T
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
* k% K% m3 j+ h) U1 ?
完整代码 1 D4 ~; p8 Q( N; U- C
- ; Y% r9 e* j/ v, |
- 9 J% G7 F8 B# ^# \ E
- 7 U% C7 z! t& X C
- ' n S' }& y; E( ~; M9 }
, z, b% N! D' W$ [; Q& j
' f* M& ?4 l- T
^2 C+ R. N3 p# k
) f1 H8 x6 d" c% k- }# p- 4 q( Q# ^$ g% O# W
0 `( q9 n, ?; @4 O- s- ' M7 ~' U- ]7 v7 `7 @+ g5 h
9 T& R. M' \+ I; @9 ?# Z+ v- 9 w. p1 ~# K! \% i! I* v- p a7 ?
- 9 t8 y9 ]' P E/ m6 A
/ c6 a" _' o% N! L+ n3 l3 V- $ q% G$ y z& |) Q" u( L2 ^
7 c7 o3 q0 N. `' r9 V
/ Z# T" o( M. i; \3 p# t% ~8 ]: L+ M" Y
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) - O; {7 j3 s5 w$ R% R
|