python批量处理气象站点降雨数据2——批量处理长时间序列的特定区域降水数据

时间:2024-03-09 19:18:32

1、将批量下载好的原始数据保存在data文件夹,数据如图:,总共有196101-201612长达56年的长时间序列数据。

2、需要将原始的数据按照索引数据进行批量处理好可用的月降水数据。具体代码如下:

 

 

3、运行结果列表如图:

python对地理数据的处理非常实用,有强大的数据分析工具包。不过具体的实现代码需要有一定的python编程知识,本文代码的撰写来自代码开头声明的作者,转载需要注明该作者的版权。其中涉及到python对excel数据的读取和存储的应用,主要学习网址如下:https://pandas.pydata.org/pandas-docs/version/0.23/?tdsourcetag=s_pctim_aiomsg 。该实验操作具体代码如下:

 1 import os,sys
 2 import numpy as np
 3 import pandas as pd
 4 import csv
 5 def txt_to_array(values):
 6     return np.array([[i for i in filter(None,data[0].split(\' \'))] for data in values])
 7 
 8 def csv_write(path,data,index_array):
 9     df=open(path,\'w\',newline=\'\')
10     csv_writer=csv.writer(df)
11     header=[\'id\',\'row\',\'col\',\'x\',\'y\',\'values\']
12     csv_writer.writerow(header)
13     for item in index_array:
14         item[-1]=data[int(item[1]),int(item[2])]
15         csv_writer.writerow(item)
16     df.close()
17 
18 
19 
20 if __name__=="__main__":
21 
22     # 研究区域位置索引文件,用arcgis处理得到,如果该文件和该运行文件在同一目录,可以直接用文件名
23     #index_filename=r\'index.txt\'
24     index_filename=r\'E:\rainfull\index.txt\' #某地理位置区域的地理索引数据
25     #降雨数据所在的--目录(dir)
26     rainfull_dir=r\'E:\rainfull\data\'#批量下载好的气象数据网中的插值站点数据
27     #处理结果存放目录
28     out_path=r\'E:\rainfull\TRHrainfull40\'
29     #最后的数据格式文件
30     out_file=r\'E:\rainfull\TRHrainfull40\datahebing.txt\'#将处理得到的每年的所有站点数据合并的文件
31 
32 
33     if os.path.exists(out_path)==False:
34         os.makedirs(out_path)
35     index_array=pd.read_csv(index_filename,header=0)
36     columns=index_array.columns.tolist()
37     row_index=columns.index(\'row\')
38     index_array=index_array.values[:,(row_index-1):]
39     files=os.listdir(rainfull_dir)
40     for rainfull_filename in files:
41         (filename,extension)=os.path.splitext(rainfull_filename)
42         if extension==\'.txt\':
43             print(filename)
44             rainfull_path=os.path.join(rainfull_dir,rainfull_filename)
45             rainfull_array=pd.read_csv(rainfull_path,header=list(range(6)))
46             rainfull_array=rainfull_array.values
47             rainfull_array=txt_to_array(rainfull_array)
48             csv_write(os.path.join(out_path,filename+\'.csv\'),rainfull_array,index_array)
49     csv_file_list=os.listdir(out_path)
50     year_dict={}
51     site_count=0
52     for file in csv_file_list:
53         (filename,extension)=os.path.splitext(file)
54         if extension==\'.csv\':
55             year_mouth=filename.split(\'-\')[-1]
56             file_path=os.path.join(out_path,file)
57             data=pd.read_csv(file_path,header=0)
58             data=data.values
59             data=data[:,-1].T
60             site_count=len(data)
61             year_dict[year_mouth]=data
62     with open(out_file,\'w\') as df:
63         df.write(\'Year,Month,\')
64         for i in range(site_count):
65             df.write("site_"+str(i))
66         df.write(\'\n\')
67 
68         for key,value in year_dict.items():
69             year=key[0:4]
70             mouth=key[4:]
71             df.write(year+","+mouth+",")
72             value=\',\'.join([str(i) for i in value.tolist()])
73             df.write(value)
74             df.write(\'\n\')