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\')