美文网首页Python与大气科学
Python气象数据处理与绘图(1):数据读取

Python气象数据处理与绘图(1):数据读取

作者: 摸鱼咯 | 来源:发表于2020-02-01 21:19 被阅读0次

    1、NetCDF文件(***.nc)

    python很多库支持了对nc格式文件的读取,比如NetCDF4,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。

    我最初使用PyNio,但是由于NCL到Python的移植并不完全,导致目前远不如直接使用NCL方便,而在接触Xarray库后,发现其功能强大远超NCL(也可能是我NCL太菜的原因)。

    安装同其它库一致:

    conda install xarray
    

    我这里以一套中国逐日最高温度格点资料(CN05.1)为例,其水平精度为0.5°X0.5°。

    import xarray as xr
    f_tmax = xr.open_dataset('CN05.1_Tmax_1961_2017_daily_05x05.nc')
    
    image.png

    可以看到,文件的坐标有时间, 经度,纬度,变量有日最高温
    我们将最高温数据取出

    tmax = f_tmax['tmax']
    
    image.png

    这与Linux系统中的ncl_filedump指令看到的信息是类似的
    Xarray在读取坐标信息时,自动将时间坐标读取为了datetime64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
    比如我们想选取1979.06.01-1979.06.20时期数据,我们只需

    a = tmax.loc['1979-06-01':'1979-06-20']
    
    image.png

    再比如我们想选取夏季数据时,只需

    a = tmax.loc[tmax.time.dt.season=='JJA']
    
    image.png

    更多的时间操作同python的datetime函数类似。
    当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
    在这里,我选取了40°N-55°N,115°E-135°E范围的数据

    a = tmax.loc[:,40:55,115:135]
    
    image.png

    甚至,我们还可以套娃,同时叠加时间和范围的选取

    a = tmax.loc[:,40:55,115:135].loc[tmax.time.dt.season=='JJA']
    
    image.png

    这足够满足常用到的数据索引要求。

    2、TXT(CSV...)

    对于这类简单排列的.txt文件,可以通过np.load读取,用pandas的.read_csv更为方便


    image.png
    data = pd.read_csv("cslist.txt",sep=',',header=None, names=['a','b','c','d','e','f','g','h','i','j','k']) 
    

    读取txt的同时,对每列赋予了一个列名,通过data.a可以直接按列名调用相应数据。
    对于较复杂的.txt文件,仍可通过该函数读取


    image.png
    data1 = pd.read_csv("trajectories.txt",skiprows=5,sep='\s+',header=None)  
    

    skiprows=5跳过了前5行的文件头,sep='\s+'定义了数据间隔为空格,这里用的是正则表达。
    pd.read_csv函数有很多的参数,可以处理各种复杂情况下的文本文件读取。

    3、Grib

    grib文件可通过pygrib库读取
    import pygrib
    f = pygrib.open('xxx.grb')

    相关文章

      网友评论

        本文标题:Python气象数据处理与绘图(1):数据读取

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