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

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

Python版本为3.7.

1. 解压并筛选数据

这里下载了十年的某几个站点的监测数据,其中stations.csv为站点数据。
在这里插入图片描述
解压缩后的为大量站点的年度数据,所以需要先筛选出对应站点的数据。

参数备注: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)

#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 sys

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

处理完的目录结构:
在这里插入图片描述
然后复制移动均值数据,到刚刚在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

#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文件夹下,再合并一次。
在这里插入图片描述
这部分合并代码如下:

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

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙同学的一个笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值