|
第一步:使用anaconda安装carray库: - / T8 i& v) i) U! V. d
' L8 e% O5 |) Z, S; ~8 b: ?, f: A
conda install xarray3 ]% p8 b# c, H+ K& W2 d
- y2 ~/ t4 S/ ^4 H( x3 j) L& M
第二步:使用Spyder(Python3.8)读取数据NetCDF文件(***.nc) 以一套CMIP6的全球气候模式BCC-CSM2-MR(中国北京气候中心研发,分辨率为160*320)输出的tas(表面气温)变量1850-2014年的历史格点资料为例: (数据下载地址:www.52ocean.cn)
读取数据的代码如下:
1 A7 J0 i9 B. E9 E& ^
" Z+ e" n& D/ E# ?, T' ?
/ b, }! X! P* g" m
g [/ _" |- r1 v- ' q& _1 n7 v. g' L$ d
+ c# H( c/ K6 n$ A- Z/ B6 v: Q
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)
2 M0 `, w; }7 e) Y0 D3 X7 T/ l 9 f" H8 N9 `8 j8 x# X+ Z
文件信息查看如下:
可以看到,文件的坐标有时间time, 经度lon,纬度lat,高度height,变量有表面气温tas。
4 ^8 a0 n8 G1 Z" y第三步代码如下:
$ @% _& k2 N" I8 S( g `- 7 P* P7 v7 R, |8 f& Z2 q% r6 i
- 0 K0 c0 m) H c4 _' }' N( B
- * `4 b0 ]. ?! n) a8 a
4 S1 P b$ Q- r. U+ D' f/ t+ g, V
' L, U. s/ _4 Z/ B% v
5 E' ]& D+ ?/ ~2 \0 m8 i% {, t- + J' \' }, l3 p9 a/ g6 \& E k0 G
- , {! C8 V! q1 S/ J |8 u; B Y
# K8 [, I/ P0 y; l4 f% t8 b( i
+ m4 q0 k' E: T
#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)9 b9 g2 B! o5 T! c
* z1 H- N5 V- O4 J: B) b) O7 Q第三步:气温数据取出 Xarray在读取坐标信息时,自动将时间坐标读取为了float64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
+ J) ]+ O0 e, Y0 o5 ^3 I$ X6 \
第四步:选取某时间段内数据 比如我们想选取15.5-74.5(根据数据信息中time格式的规定输入相应格式)时期数据。
7 e7 n" N" H% d$ V7 p- i `% G
第五步:选取特定经纬度范围(高度)的数据 当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
, \/ l% A; J+ D( ^- h: @* t; m0 R在这里,我选取了40°N-55°N,115°E-135°E范围的数据
1 U/ m: A! c) ?) n完整代码
. V+ d; N/ W* S; W6 O5 \1 B- 3 \ l0 w9 E6 k+ X S
- % a6 @$ w r* }% @7 i9 J1 ~9 Y
6 E# [; ~3 u; e c" ]
m1 h2 N4 K/ B$ h3 J
, \* [+ w6 ~9 T; l9 y. ?! {& e- ( u" ?: q' u% l6 M% C7 K
- / d4 V6 ^7 l6 V3 L9 V4 H& V% m( U9 s
- , v4 B: v0 p& y' h
- 7 ^( v$ W' B, I* \
- ! ~+ c& o1 _) T: `: I) o8 T
4 j- ?7 K2 W8 ^+ _# O) ^
/ i9 u% L. e, C% t- p7 z7 ?: \! }) p- " [4 D- Y1 m- l" f# E
; w" y! C: z6 R- _2 A- t) x
$ z- o. V" O. T# ?6 j* N/ B& ^
9 S! |- z) |* W$ W- 5 S- C- {! H, o5 v+ x4 n5 }0 o
- ' m% n% z9 Y' V& Q' B7 [" E v
! D8 {. T% F8 C& s: V, Q
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) 2 ~$ d4 t! D5 E8 Y
|