美文网首页Python与大气科学xarray
Python气象数据处理进阶之Xarray(7):读写文件

Python气象数据处理进阶之Xarray(7):读写文件

作者: 摸鱼咯 | 来源:发表于2020-05-07 19:45 被阅读0次

前几文主要讲的是如何处理Xarray中的DataArray和DataSet,现在分享一下如何从nc文件或其他文件中读取数据,以及如何将处理好的数据输出成一个nc文件。

首先还是要再强调DataArray和DataSet的区别,DataArray是一个带标签结构的数组,DataSet是一个数据集,这意味着,从一个nc文件中读取到的全部信息构成了一个DataSet,而nc文件中的某一个变量是一个DataArray。

反之,我们要将一个数据写成nc文件,那么就是要创建一个DataSet。

生成.nc文件

ds = xr.Dataset({'prec': (('xy', 'time'), np.random.rand(4, 5))},coords={'lat': ('xy', [15, 25, 35, 45]),
                                                                         'lon': ('xy', [15, 25, 35, 45]),
                                                                         'time': pd.date_range('2000-01-01', periods=5),})
print(ds)
#<xarray.Dataset>
#Dimensions:  (time: 5, xy: 4)
#Coordinates:
#    lat      (xy) int64 15 25 35 45
#    lon      (xy) int64 15 25 35 45
#  * time     (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
#Dimensions without coordinates: xy
#Data variables:
#    prec     (xy, time) float64 0.3666 0.004261 0.2313 ... 0.4544 0.9248 0.5594

这个数据结构有点像站点数据,对xy维设定了两层,分别是经纬度,还有一维时间维(whatever,反正是随便创建一个DataSet)。

ds.to_netcdf('output.nc')

就可以输出成nc文件了。
当然还可以更懒一点,

ds = xr.Dataset({'abc': abc})                                                                            

直接将abc这个DataArray转成DataSet,DataArray的标签和纬度信息会自动转换。
之后使用to_netcdf即可。

读取.nc文件

读取的语句也十分简单。

ds = xr.open_dataset('ds.nc')

函数只需要基本的路径及文件名,无需像NCL一样声明状态'r'。

Xarray读取多文件也提供了相应函数(我目前没有使用过,我通常都是使用CDO提前处理,大家可以自行尝试)。

xr.open_mfdataset('my/files/*.nc', parallel=True)

读取GRIB文件

根据官方的介绍,Xarray也支持grib文件的读取。

ds_grib = xr.open_dataset('example.grib', engine='cfgrib')

前提是需要一个解码库"eccodes"

conda install -c conda-forge eccodes

或者利用Xarray借助PYNIO去读。

conda install -c conda-forge pynio
ds_grib = xr.open_dataset('example.grib', engine='pynio')

官方文档中还有一部分是关于画图的,然而画图部分个人认为使用matplotlib+cartopy的组合更加灵活,因此Xarray系列到这里应该就完结了。

下一步的计划是按照魏凤英老师的统计方法一书,试着将常用的气象统计方法利用python去实现,但是水平实在有限。

相关文章

网友评论

    本文标题:Python气象数据处理进阶之Xarray(7):读写文件

    本文链接:https://www.haomeiwen.com/subject/ajlaghtx.html