- 气象监测数据下载(可下载最新及每日气象数据)
- NOAA气象日监测数据均值计算python代码整理
- PostgreSQL数据库导入EXCEL数据表
之前已经介绍了如何下载气象的每日监测数据,这里就整理介绍下如何基于这些数据,计算月均值的数据。
Python版本为3.7.
1. 解压并筛选数据这里下载了十年的某几个站点的监测数据,其中stations.csv为站点数据。
解压缩后的为大量站点的年度数据,所以需要先筛选出对应站点的数据。
参数备注:files为station中的站点编号;2011处为年份命名文件夹,这里手动修改,没写循环。
筛选并转储到后续处理的文件夹,代码如下:
import glob import shutil import sys import os outdirectory = 'D:Codespythontestyxdldata11' file_names = glob.glob('F:数据1二维数据downdatadis11*.csv') files = ['42398099999','44478099999','42403099999','42295099999','44477099999', '42404099999','42406099999','41863099999','42299099999','42399099999','42423099999', '41862099999','55773099999','43399099999','41862199999','41862199999','41859099999', '41858099999','44461099999','44474099999','41850099999','41852099999'] #判断文件夹是否存在并创建 if os.path.exists(outdirectory): print('%s:存在'%outdirectory) else: os.mkdir(outdirectory) print('新建文件夹:%s'%outdirectory) #file = for i in range(0,len(files)): print(files[i]) for file_name in file_names: filetemp = str.split(file_name,'\')[-1] if (files[i]+'.csv')==filetemp: print('copying') shutil.copy(file_name, outdirectory) print("finish")
处理完的目录结构:
然后通过pandas计算月均值。
参数备注:这里的2011也需要手动改。
计算并存储到均值计算目录,代码如下:
import pandas as pd import glob import shutil import sys outdirectory = 'D:Codespythontestyxdldatamean11' file_names = glob.glob('D:Codespythontestyxdldata11*.csv') time = 2011 #csvfile ="D:Codespythontestyxdldata21773099999.csv" import os #判断文件夹是否存在并创建 if os.path.exists(outdirectory): print('%s:存在'%outdirectory) else: os.mkdir(outdirectory) print('新建文件夹:%s'%outdirectory) for csvfile in file_names: df = pd.read_csv(csvfile) #df = pd.Dataframe(file) # print(df.head()) df['DATE'] = pd.to_datetime(df['DATE'],format='%Y-%m-%d') #print(df.head()) #将时间作为索引 df = df.set_index('DATE') #保留一位小数 format1=lambda x:"%.1f"%x #按月进行平均值统计 dfM=df.resample('M').mean() dfM[['TEMP','MAX','MIN']]=dfM[['TEMP','MAX','MIN']].applymap(format1)#保留一位小数 #保存月平均数据 filetemp = str.split(csvfile,'\')[-1] filetemp = str.split(filetemp,'.')[0] print(filetemp) outfile = outdirectory + '\'+filetemp +'_'+str(time)+ '_mean.csv' dfM.to_csv(outfile,encoding='gbk')
处理完的目录结构:
先手动新建站点合并文件夹hebing。
根据站点编号,在hebing文件夹下创建对应的文件夹。合并代码如下:
import pandas as pd import os import glob findpath = 'D:Codespythontestyxdldatahebing' files = ['42398099999','44478099999','42403099999','42295099999','44477099999', '42404099999','42406099999','41863099999','42299099999','42399099999','42423099999', '41862099999','55773099999','43399099999','41862199999','41862199999','41859099999', '41858099999','44461099999','44474099999','41850099999','41852099999'] for filename in files: directory = findpath+ '\'+filename #判断文件夹是否存在并创建 if os.path.exists(directory): print('%s:存在'%directory) else: os.mkdir(directory) print('新建文件夹:%s'%directory)
处理完的目录结构:
然后复制移动均值数据,到刚刚在hebing下创建的各个站点文件夹目录下:
参数备注:这里的filefind需要手动改。
代码如下:
import glob import shutil import sys import os outdirectory = 'D:Codespythontestyxdldatahebing' file_names = glob.glob('D:Codespythontestyxdldatamean**.csv') filefind = '55773099999' for filename in file_names: filetemp = str.split(filename,'\')[-1] filetemp = str.split(filetemp,'.')[0] filetemp = str.split(filetemp,'_')[0] dtemp=outdirectory+'\'+filetemp print(filetemp) if filefind == filetemp: print('copying') shutil.copy(filename, dtemp) print("finish")
移动完成后,即可合并每个站点目录下的每年月均值csv文件。
参数备注:两个编号处手动改。
代码如下:
import pandas as pd import os import glob #filepath = 'D:Codespythontestyxdldatahebing398099999' file_names = glob.glob('D:Codespythontestyxdldatahebing474099999*.csv') outdirectory = 'D:Codespythontestyxdldatahebing474099999hebingout' import os #判断文件夹是否存在并创建 if os.path.exists(outdirectory): print('%s:存在'%outdirectory) else: os.mkdir(outdirectory) print('新建文件夹:%s'%outdirectory) for inputfile in file_names: df = pd.read_csv(inputfile) print(1111) filetemp = str.split(inputfile,'\')[-1] filetemp = str.split(filetemp,'.')[0] filetemp = str.split(filetemp,'_')[0] print(filetemp) outfile = outdirectory + '\'+filetemp + '_hb.csv' df.to_csv(outfile, mode='a',index=False, header=False)
然后手动将每个站点合并好的数据拷贝到zong文件夹下,再合并一次。
这部分合并代码如下:
import pandas as pd import os import glob file_names = glob.glob('D:Codespythontestyxdldatahebingzong*.csv') outdirectory = 'D:Codespythontestyxdldatahebingzong' import os #判断文件夹是否存在并创建 if os.path.exists(outdirectory): print('%s:存在'%outdirectory) else: os.mkdir(outdirectory) print('新建文件夹:%s'%outdirectory) for inputfile in file_names: df = pd.read_csv(inputfile) outfile = outdirectory + '\'+'hb.csv' df.to_csv(outfile, mode='a',index=False, header=False)
OK,然后到这里数据就处理得差不多了。就可以导入数据库了。具体参考博客PostgreSQL数据库导入EXCEL数据表。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)