python批量处理气象站点降雨数据1——处理成正确的降水索引数据


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)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM