首先还是要再强调DataArray和DataSet的区别,DataArray是一个带标签结构的数组,DataSet是一个数据集,这意味着,从一个nc文件中读取到的全部信息构成了一个DataSet,而nc文件中的某一个变量是一个DataArray。
反之,我们要将一个数据写成nc文件,那么就是要创建一个DataSet。
这个数据结构有点像站点数据,对xy维设定了两层,分别是经纬度,还有一维时间维(whatever,反正是随便创建一个DataSet)。
就可以输出成nc文件了。
当然还可以更懒一点,
直接将abc这个DataArray转成DataSet,DataArray的标签和纬度信息会自动转换。
之后使用to_netcdf即可。
读取的语句也十分简单。
函数只需要基本的路径及文件名,无需像NCL一样声明状态'r'。
Xarray读取多文件也提供了相应函数(我目前没有使用过,我通常都是使用CDO提前处理,大家可以自行尝试)。
根据官方的介绍,Xarray也支持grib文件的读取。
前提是需要一个解码库"eccodes"
或者利用Xarray借助PYNIO去读。
官方文档中还有一部分是关于画图的,然而画图部分个人认为使用matplotlib+cartopy的组合更加灵活,因此Xarray系列到这里应该就完结了。
下一步的计划是按照魏凤英老师的统计方法一书,试着将常用的气象统计方法利用python去实现,但是水平实在有限。
python很多库支持了对nc格式文件的读取,比如NetCDF4,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。
我最初使用PyNio,但是由于NCL到Python的移植并不完全,导致目前远不如直接使用NCL方便,而在接触Xarray库后,发现其功能强大远超NCL(也可能是我NCL太菜的原因)。
安装同其它库一致:
我这里以一套中国逐日最高温度格点资料(CN05.1)为例,其水平精度为0.5°X0.5°。
可以看到,文件的坐标有时间, 经度,纬度,变量有日最高温
我们将最高温数据取出
这与Linux系统中的ncl_filedump指令看到的信息是类似的
Xarray在读取坐标信息时,自动将时间坐标读取为了datetime64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
比如我们想选取1979.06.01-1979.06.20时期数据,我们只需
再比如我们想选取夏季数据时,只需
更多的时间 *** 作同python的datetime函数类似。
当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
甚至,我们还可以套娃,同时叠加时间和范围的选取
这足够满足常用到的数据索引要求。
对于这类简单排列的.txt文件,可以通过np.load读取,用pandas的.read_csv更为方便
读取txt的同时,对每列赋予了一个列名,通过data.a可以直接按列名调用相应数据。
对于较复杂的.txt文件,仍可通过该函数读取
skiprows=5跳过了前5行的文件头,sep='\s+'定义了数据间隔为空格,这里用的是正则表达。
pd.read_csv函数有很多的参数,可以处理各种复杂情况下的文本文件读取。
grib文件可通过pygrib库读取
import pygrib
f = pygrib.open('xxx.grb')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)