NOAA气象日监测数据均值计算python代码整理

之前已经介绍了如何下载气象的每日监测数据,这里就整理介绍下如何基于这些数据,计算月均值的数据。

Python版本为3.7.

1. 解压并筛选数据

这里下载了十年的某几个站点的监测数据,其中stations.csv为站点数据。

NOAA气象日监测数据均值计算python代码整理
解压缩后的为大量站点的年度数据,所以需要先筛选出对应站点的数据。

参数备注:files为station中的站点编号;2011处为年份命名文件夹,这里手动修改,没写循环。

筛选并转储到后续处理的文件夹,代码如下:

import glob
import shutil
import sys
import os

outdirectory = '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)

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")

处理完的目录结构:

NOAA气象日监测数据均值计算python代码整理

2. 计算月均值

然后通过pandas计算月均值。
参数备注:这里的2011也需要手动改。

计算并存储到均值计算目录,代码如下:

import pandas as pd
import glob
import shutil
import sys

outdirectory = 'D:\Codes\pythontest\yxdl\data\mean\\2011'
file_names = glob.glob('D:\Codes\pythontest\yxdl\data\\2011\*.csv')
time = 2011

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['DATE'] = pd.to_datetime(df['DATE'],format='%Y-%m-%d')

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

处理完的目录结构:

NOAA气象日监测数据均值计算python代码整理

3. 按站点进行csv数据合并

先手动新建站点合并文件夹hebing。

根据站点编号,在hebing文件夹下创建对应的文件夹。合并代码如下:

import pandas as pd
import os
import glob

findpath = '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)

处理完的目录结构:

NOAA气象日监测数据均值计算python代码整理
然后复制移动均值数据,到刚刚在hebing下创建的各个站点文件夹目录下:
参数备注:这里的filefind需要手动改。

代码如下:

import glob
import shutil
import sys
import os

outdirectory = '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+'\\'+filetemp
    print(filetemp)
    if filefind == filetemp:
       print('copying')
       shutil.copy(filename, dtemp)

print("finish")

移动完成后,即可合并每个站点目录下的每年月均值csv文件。
参数备注:两个编号处手动改。

代码如下:

import pandas as pd
import os
import glob

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文件夹下,再合并一次。

NOAA气象日监测数据均值计算python代码整理
这部分合并代码如下:
import pandas as pd
import os
import glob

file_names = glob.glob('D:\Codes\pythontest\yxdl\data\hebing\zong\*.csv')
outdirectory = 'D:\Codes\pythontest\yxdl\data\hebing\zong'

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数据表

Original: https://blog.csdn.net/suntongxue100/article/details/121284485
Author: 孙同学的一个笔记本
Title: NOAA气象日监测数据均值计算python代码整理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/738438/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球