python 读取grib/grib2格式数据
一般利用NCL(NCAR Command Language)读取。利用Python语言的pygrib库也可以读取grib/grib2格式数据
grib/grib2 格式数据介绍
1 数据下载方法
数据可以通过NCAR/UCAR的官网FNL再分析资料进行下载
注册账号–找下下载的数据–下载相应的下载shell脚本–在服务器中运行该脚本进行下载
2 数据格式
fnl再分析资料的数据格式有netcdf 和grib grib2 这几种数据格式,用于WRF读取的为grib grib2格式的,所以一般下载grib格式的数据。其中,grib1 的数据从1999年7月30日-2007年12月6日;grib2格式的数据从2007年12月7日到现在
3 数据变量
可以利用Panoply load 相应的grib2格式的数据查看变量
可以利用wgrib读取变量
可以利用pygrib函数读取变量【下面进行讲述】
变量对应的TABLE不能在文件中查看,只能在官网上寻找相应的TABLE grib2格式数据变量TABLE
pygrib 函数介绍
所有的pygrib版本都在Pythonpygrib官网中有介绍,包括其版本,安装包和安装方法。
1 头文件读取
头文件相关信息读取
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')# 所有变量
for grb in grbs: print grb #每一个变量的头文件print grb.keys() #每一个变量的keysprint grb.values # 每一个变量的值
头文件读取并写入txt脚本
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
with open('fnl_17030406.txt','w') as f:for grb in grbs:f.write(str(grb) + '\n')
2 数据读取
读取数据并将数据写入txt文件中
但是写入txt文件中之后txt中的数据显示不完整,所以最好写入csv文件
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
f = open('./txt/data_17090100.txt','w')
grbs.seek(0)
grb = grbs.select(name = 'U component of wind')[0]
f.write(str(grb) +'\n')
value = grb.values
f.write(str(value))
f.close()
读取数据并写入csv文件中
方法1:根据变量的名称和index 进行变量读取
import pygrib as pg
import pandas as pd
import csv
grbs = pg.open('fnl_17030406.grib2')
grbs.seek(0)
grb = grbs.select(name = '2 metre temperature')[0]
value = grb.values
data = pd.DataFrame(value)
data.to_csv('./txt/17090100.csv',index = False,header = False)
lats,lons = grb.latlons()
output_list = []
for i in range(lats.shape[0]):zip1 = zip(lats[i],lons[i])output_list.append(list(zip1))output = pd.DataFrame(output_list)
方法2: 遍历所有变量,根据已知的时间,变量名,level等信息读取变量的value(一般来说这种方法更常用,而且不易出错)
详细内容请参加github中给出的Jupiter实例pygrib 实例:
import pygrib as pg
import pandas as pd
import csv
import datetime as dt
grbs = pg.open('fnl_17030406.grib2')
tem = []
data_valid = dt.datetime(2017,3,4,6)
for grb in grbs:if grb.validDate == date_valid and grb.parameterName == 'Temperature' and grb.level == 2:tem.append(grb,values)