1、原始数据如图,
2、将原始的气象站点数据按照地理研究区域提取出来。如图:
3、利用python程序进行处理,代码如下:
4、运行得到结果如下图
5、说明:
此步骤是将带有缺省值的原始降水数据处理成带有行列号、坐标和降水值的csv格式数据,方便后期进行降水数据的分析与使用。代码部分为开头声明的作者,使用者需声明版权。
具体代码如下:
1 import numpy 2 import csv 3 import pandas as pd 4 import numpy as np 5 6 7 def txt_to_array(values): 8 return np.array([[i for i in filter(None,data[0].split(' '))] for data in values]) 9 def header_to_dict(header): 10 header=header[0] 11 header=np.array([[i for i in filter(None,data.split(' '))] for data in header]) 12 13 header_dict={} 14 for key,values in header: 15 header_dict[str(key)]=eval(values) 16 return header_dict 17 def index_to_coor(row,col,x_start,y_start,cell_size): 18 '''[summary] 19 20 [description] 21 22 Arguments: 23 row {[type]} -- [行号] 24 col {[type]} -- [列号] 25 x_start {[type]} -- [左上角x] 26 y_start {[type]} -- [左上角y] 27 cell_size {[type]} -- [网格size] 28 ''' 29 return x_start+col*cell_size+0.25,y_start-row*cell_size+0.25 30 31 def csv_write(path,data,header_dict): 32 df=open(path,'w',newline='') 33 csv_writer=csv.writer(df) 34 header=['row','col','x','y','values'] 35 csv_writer.writerow(header) 36 #l:left,u:up,r:right,d:down 37 x_l_u_start=header_dict["XLLCORNER"] 38 y_l_u_start=header_dict['YLLCORNER']+(header_dict['NROWS']-1)*header_dict['CELLSIZE'] 39 for row in range(int(header_dict['NROWS'])): 40 for col in range(int(header_dict['NCOLS'])): 41 x,y=index_to_coor(row,col,x_l_u_start,y_l_u_start,header_dict['CELLSIZE']) 42 csv_writer.writerow([row,col,x,y,data[row,col]]) 43 df.close() 44 45 46 if __name__=="__main__": 47 #路径名必须是英文的 48 #只需要改这两个文件,其他不需要改 49 #filename选择任意一个降雨txt数据 50 filename=r'E:\rainfull\data\SURF_CLI_CHN_PRE_MON_GRID_0.5-196101.txt' 51 #导出生成每行一个各网点数据,经纬度,行列编号等 52 out_path=r'E:\rainfull\SURF_CLI_CHN_PRE_MON_GRID_0.5-201601.csv' 53 54 a=pd.read_csv(filename,header=list(range(6))) 55 header=a.columns.values 56 header_dict=header_to_dict(header) 57 '''['NCOLS', 'NROWS', 'XLLCORNER', 'YLLCORNER', 'CELLSIZE', 'NODATA_VALUE']''' 58 a=a.values 59 a=txt_to_array(a) 60 csv_write(out_path,a,header_dict)