python计算数据日均值、日累加值

目标:对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)
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值