美文网首页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