近期有个计算春天的需求,网上搜了下大多是用MATLAB中的smooth函数的思路写的。正好学到pandas几个强大的数据处理方法,想着自己试试.
pandas提供了大量能使我们快速便捷地处理数据的函数和方法,什么深度学习,推荐,分类啊都挺好用。本次处理主要应用的就是窗口函数rolling,算滑动平均气温刚刚好。
**
1.数据准备
中国气象数据网上找的站点日平均气温,txt。为了方便,就取了站名、月、日、日平均气温。
2.相关概念
,
直接上图,因为描述起来怎么这么难。
(1)计算5天滑动平均气温T1
(2)滑动平均气温T1还得连续五天大于10°
(3)映射到9天有日平均气温的日子里找出第一个。
如果还是看不懂,仔细阅读https://www.doc88.com/p-0723733695358.html (其实我也是百度学的)
3.来吧,代码
import os
import pandas as pd #引入pandas
import openpyxl
import numpy as np
def window_springdate(path,filename):
papa=pd.read_csv(os.path.join(path,filename),sep='\t',header=None,names=['site','month','day','TEM']) #加载papa.txt,指定它的分隔符是 \t
w = papa['TEM']#获得气温
data1 = w.rolling(5,min_periods=1).mean()#计算5天滑动平均气温
papa['data'] = data1
papa['spring'] = papa['data'].rolling(5).agg(lambda x:min(x)>10)#滑动窗口为5天时候所有的5天滑动平均气温都高于10度
print('写入excel')
ss=filename.split('.')[0]
newfile = os.path.join('D:\\test', "re_"+ss+".xlsx")#处理后的新文件
print(newfile)
print(ss)
fp = open(newfile,'w')
papa.to_excel(newfile,index=True)
a1 = papa.loc[papa['spring'] == 1]
if not a1.empty:
print('hahah')
a = a1.iloc[0]
print(a)
b =pd.DataFrame(data=a)
c = b.T
return c
else:
print('winter')
因为处理的1-3月份的数据,条件那块没写的那么细。等算其他季节时候再说吧~~~~
DataFrame.rolling(window, min_periods=None, center=False, win_type=None,
on=None, axis=0, closed=None)
rolling窗口函数可以直接用mean()求平均,sum() 值的总和,等等。好玩的是 agg ()函数可以快速实现多个聚类函数,并输出结果。代码示例里就用的这个换了个思路得到滑动平均气温连续5天大于等于10度的。
不过求得的a是series,换了个格式后,就能得到结果。
rootdir='D:\\offlinedata'
# read
for (dirpath,dirnames,filenames) in os.walk(rootdir):
for filename in filenames:
print('>>>>',filename)
a = window_springdate(dirpath,filename)
if a is None:
print('cold')
continue
else:
print(a)
a.to_csv(r'C:\Users\nanch\Desktop\2.csv',line_terminator="\n",mode='a',encoding='utf8')
print('bye')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。