NOAA气象日监测数据均值计算python代码整理
生活随笔
收集整理的這篇文章主要介紹了
NOAA气象日监测数据均值计算python代码整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 氣象監測數據下載(可下載最新及每日氣象數據)
- NOAA氣象日監測數據均值計算python代碼整理
- PostgreSQL數據庫導入EXCEL數據表
之前已經介紹了如何下載氣象的每日監測數據,這里就整理介紹下如何基于這些數據,計算月均值的數據。
Python版本為3.7.
1. 解壓并篩選數據
這里下載了十年的某幾個站點的監測數據,其中stations.csv為站點數據。
解壓縮后的為大量站點的年度數據,所以需要先篩選出對應站點的數據。
參數備注:files為station中的站點編號;2011處為年份命名文件夾,這里手動修改,沒寫循環。
篩選并轉儲到后續處理的文件夾,代碼如下:
import glob import shutil import sys import osoutdirectory = 'D:\Codes\pythontest\yxdl\data\\2011' file_names = glob.glob('F:\數據1\二維數據\downdata\dis\\2011\*.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")處理完的目錄結構:
2. 計算月均值
然后通過pandas計算月均值。
參數備注:這里的2011也需要手動改。
計算并存儲到均值計算目錄,代碼如下:
import pandas as pd import glob import shutil import sysoutdirectory = 'D:\Codes\pythontest\yxdl\data\mean\\2011' file_names = glob.glob('D:\Codes\pythontest\yxdl\data\\2011\*.csv') time = 2011 #csvfile ="D:\Codes\pythontest\yxdl\data\\2021\\55773099999.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')處理完的目錄結構:
3. 按站點進行csv數據合并
先手動新建站點合并文件夾hebing。
根據站點編號,在hebing文件夾下創建對應的文件夾。合并代碼如下:
import pandas as pd import os import globfindpath = 'D:\Codes\pythontest\yxdl\data\hebing'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 osoutdirectory = 'D:\Codes\pythontest\yxdl\data\hebing' file_names = glob.glob('D:\Codes\pythontest\yxdl\data\mean\*\*.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+'\\'+filetempprint(filetemp)if filefind == filetemp:print('copying')shutil.copy(filename, dtemp)print("finish")移動完成后,即可合并每個站點目錄下的每年月均值csv文件。
參數備注:兩個編號處手動改。
代碼如下:
import pandas as pd import os import glob#filepath = 'D:\Codes\pythontest\yxdl\data\hebing\\42398099999' file_names = glob.glob('D:\Codes\pythontest\yxdl\data\hebing\\44474099999\*.csv') outdirectory = 'D:\Codes\pythontest\yxdl\data\hebing\\44474099999\hebingout'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文件夾下,再合并一次。
這部分合并代碼如下:
OK,然后到這里數據就處理得差不多了。就可以導入數據庫了。具體參考博客PostgreSQL數據庫導入EXCEL數據表。
總結
以上是生活随笔為你收集整理的NOAA气象日监测数据均值计算python代码整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付—微信H5支付「微信内部浏览器」
- 下一篇: Python2和Python3的兼容性写