目标:对excel表格中每一天的温度进行求平均、对净辐射求和,并将值写为新的一列
原始数据:一天有24*6条数据
结果:一天产生一个值
代码
# -*- coding: utf-8 -*-
"""
对excel表格中每一天的温度进行求平均,对净辐射求和等
并且将时间和值仍然写在旧的excel表
YMJ, 20230119, 11:00
"""
import numpy as np
from numpy import *
import pandas as pd
import os
import datetime
from datetime import datetime, date
from pandas import DataFrame
file = 'D:\\YMJ_file\\test\\fluxdata_process\\2014年四道桥超级站通量气象30分钟数据.xlsx'
data = pd.read_excel(file)
# 提取时间列(时间戳格式)的年月日
data['年月日'] = data['Date'].apply(lambda x: x.strftime('%Y%m%d'))
date_array = np.array(data['年月日'])
date_list = date_array.tolist()
# 去掉数组中的重复日期,只留下一天一天
date = np.unique(data["年月日"])
# 将数据转为dataframe格式,写入excel中
date = DataFrame(date)
data["date"] = date
# 提取时间列的DOY
DOY = np.unique(data["DOY"])
DOY = DataFrame(DOY)
data["doy"] = DOY
# 求TA平均值
Ta_list = np.array(data["Ta_5m"]).tolist()
Ta_day_list = []
Ta_day_mean_list = []
# 求Rn的累加值
Rn_list = np.array(data["Rn"]).tolist()
Rn_day_list = []
Rn_day_sum_list = []
# 因为是批量处理,不止2014年,所以这里有年月日的判断
for year in range(2013, 2016, 1):
str1 = str(year)
for month in range(1, 13, 1):
if month < 10:
str2 = "0" + str(month)
else:
str2 = str(month)
for day in range(1, 32, 1):
if day < 10:
str3 = "0" + str(day)
else:
str3 = str(day)
# 得到循环下的名称
date_name = str1 + str2 + str3
# 判断输入日期下是否存在这一日期
for i in range(len(date_list)):
if date_list[i] == date_name :
Ta_day_list.append(Ta_list[i])
Rn_day_list.append(Rn_list[i])
Ta_day_mean = mean(Ta_day_list)
Ta_day_mean_list.append(Ta_day_mean)
Ta_day_list = []
Rn_day_sum = sum(Rn_day_list)
Rn_day_sum_list.append(Rn_day_sum)
Rn_day_list = []
# 空列表产生的原因的是两个时间不匹配,比如说我的判断时间间隔是2013-2016年,实际我的输入数据只是2014年
# 空列表求和返回值是0,所以我不能判别哪一段是2014年时间段产生的数据
# 那么我就把不是2014年产生的数据变成nan值,后面再把nan剔除,那么剩下的就是2014年我想要的数据了
if len(Rn_day_list) == 0:
Rn_day_sum = nan
Rn_day_sum_list.append(Rn_day_sum)
else:
Rn_day_sum = sum(Rn_day_list)
Rn_day_sum_list.append(Rn_day_sum)
Rn_day_list = []
# 去掉因为时间不匹配产生的nan值,a_和下面的item一个意思,但是我懒得改了
Ta_day_mean_list = [a_ for a_ in Ta_day_mean_list if a_ == a_]
Ta_mean = DataFrame(Ta_day_mean_list)
# 重新生成一列数据
data["TA_day_mean"] = Ta_mean
# 去掉以为时间不匹配产生的sum——0值,不是nan,所以产生了不一样的判断
Rn_day_sum_list = [item for item in Rn_day_sum_list if item != 0]
Rn_sum = DataFrame(Rn_day_sum_list)
data["Rn_day_sum"] = Rn_sum
# 最终数据写入文件
data.to_excel(file, index=0, header=1)