|
第一步:使用anaconda安装carray库: - 4 i( e8 Y) @3 m3 C0 ~
5 T, n" N' V z) T
conda install xarray
4 u7 O2 z4 O% B# `4 ^/ B
# D: O% M4 U, V: q" ]9 B( p/ z第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下: - & W8 I) h! C( L. a' m+ H8 ^7 t
- ! Q5 f$ R- t' o! \ P8 L! m6 s
9 X# C0 Q6 y$ H% d- 9 S7 x5 X$ ]. J8 g7 ?! I0 A
7 m$ L5 ^: h3 E' H( J3 }! N- e" O$ n1 b6 i# ?/ e: \2 d/ S
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)
5 v z+ u f& f- c N 6 e3 d* g, g. p% {
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。 8 e4 W( W2 f. O1 [
第三步代码如下:
: u! F* w) y+ `3 |
% ^7 g) k5 E5 a6 J0 \! l2 D5 g: n, ~
: N/ X/ a$ V& b# |/ B
0 D2 O" X; u- u- , v+ S& \/ ] [5 B3 g7 A0 k1 J" }
- 6 a# [9 q% N$ |0 ?: z1 s8 R
- 3 k7 V/ h6 X) v# o6 U
' `8 i8 S0 j" p' g; k
7 L# U; R# Z! y6 [
/ k6 |0 N* n! A; Z
0 T2 L, L; p: J
#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)0 c6 X% P5 W9 h
( w6 C- `: [( _7 p: ]1 W第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
4 s3 I: k% w4 q5 z
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
: Q* _# X4 |3 |4 s, O
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
! W$ r% D; x; S. x) W( ?$ i' y/ ~在这里,我选取了40°N-55°N,115°E-135°E范围的数据
6 b) K" n+ w0 F完整代码
2 A# U) d! r( B4 f7 f5 R. s9 [! M
! H4 m) _7 d8 `% ?1 o
9 k( j4 r) y" l. U' f5 @* A- , @ A& o/ |4 m: W
* y' m% f' }7 X- b z
2 R% K. m! F& V- " M) N$ c2 _ ~$ j# }6 _
- + r h2 c& S+ i- O* f4 y0 t
- 2 p- p, [) g3 ~4 a
- 0 l- ]1 V4 X! [
: G% }$ z; a& N9 V- . g" d. ` z: {- n3 G% E
- 7 w/ L& `, t' K, q0 S/ ]
4 K5 c( \& \# ~! Z: I- # G' e9 D; V+ {
- l' v; G7 ~3 P5 c
* M. m6 n5 c1 [6 v) D- : b `4 }% ~3 h1 p
8 [9 K, s: _$ C1 `
5 y5 R! ~! I6 w9 @( ~8 A
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)
* _4 J: X9 O: E |