Python基于多个表格文件计算单元格数据的平均值

本文介绍基于Python 语言,对大量 不同的Excel 文件加以跨文件逐单元格平均值计算的方法。

首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有如下所示的大量Excel 文件,我们这里就以.csv文件为例来介绍。其中,每一个.csv文件的名称都是如下图所示的Ref_XXX_Y.csv格式的,其中XXX表示三个字母,后面的Y则表示若干位数字。

对于其中的每一个.csv文件,都有着如下图所示的数据格式。

我们现在的需求是,希望对于每一个名称为Ref_GRA_Y.csv格式的.csv文件,求取其中每一个单元格在所有文件中数据的平均值。例如,对于上图中DOY1blue这个单元格,那么求出来的平均值就是在全部名称为Ref_GRA_Y.csv格式的.csv文件之中,DOY1且列名为blue的单元格的平均值。此外,如果像上图一样,出现了部分单元格数值为0的情况,表明在当前文件夹下,这个单元格是没有数据的,因此需要在计算的时候舍去(并且取平均值时候的分母也要减小1)。

知道了需求,我们就可以开始代码的书写。其中,本文用到的具体代码如下所示。此外,本文实现的需求也和我们之前的文章# Python批量读取Excel表格并基于多个xlsx文件数据计算平均值有些类似,大家如果有需要,也可以参考之前的这一篇文章。

python 复制代码
# -*- coding: utf-8 -*-
"""
Created on Fri Oct  6 13:07:48 2023

@author: fkxxgis
"""

import os
import glob
import pandas as pd

folder_path = "E:/04_Reconstruction/02_Data/01_RGBNINDVI_History"
output_path = "E:/04_Reconstruction/02_Data"
file_pattern = "Ref_GRA_*.csv"

file_paths = glob.glob(os.path.join(folder_path, file_pattern))

combined_data = pd.DataFrame()

for file_path in file_paths:
    df = pd.read_csv(file_path)
    df_filtered = df[df != 0]
    combined_data = pd.concat([combined_data, df_filtered])
    
average_values = combined_data.groupby('DOY').mean()

output_file = "04_Data_YearAverage.csv"
average_values.to_csv(os.path.join(output_path,output_file), index=True)

其中,上述代码的具体介绍如下。

首先,我们导入必要的库------os库用于文件路径操作,glob库用于文件匹配,pandas库用于数据处理和分析。同时,我们定义文件夹路径folder_path,代表存储.csv文件的文件夹路径;定义输出路径output_path,代表保存结果文件的路径;定义文件匹配模式file_pattern,用于匹配需要处理的.csv文件的文件名模式。

随后,我们使用glob.glob()函数结合文件夹路径和文件匹配模式,获取满足条件的.csv文件的路径列表,存储在file_paths变量中。创建一个空的数据框combined_data,用于存储所有文件的数据。

接下来,我们使用一个循环,遍历file_paths列表中的每个文件路径。对于每个文件路径,使用pd.read_csv()函数加载.csv文件,并将其存储在名为df的数据框中。其次,使用条件筛选语句df[df != 0]排除值为0的数据,并将结果存储在名为df_filtered的数据框中。紧接着,将当前文件的数据框df_filtered合并到总数据框combined_data中,这一步骤使用pd.concat()函数实现。

完成所有文件的处理后,使用combined_data.groupby('DOY').mean()计算所有文件的平均值,按照DOY列进行分组并求平均值。随后,定义输出文件名output_file,代表保存平均值结果的文件名。

最后,使用os.path.join()函数结合输出路径和输出文件名,生成保存路径,并使用average_values.to_csv()函数将平均值数据框average_values保存为一个新的.csv文件,指定index=True以包含索引列。

运行上述代码,我们即可得到结果文件。如下图所示,可以看到结果文件中,已经是计算之后的平均值结果了。

至此,大功告成。

相关推荐
qq_1249870753几秒前
基于springboot框架的小型饮料销售管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·毕业设计
我命由我123457 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
拾忆,想起9 分钟前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现
IT_陈寒15 分钟前
JavaScript 性能优化:5个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端
沃斯堡&蓝鸟21 分钟前
DAY28 元组和OS模块
python·元组与os模块
baby_hua22 分钟前
20251011_Pytorch从入门到精通
人工智能·pytorch·python
中年程序员一枚26 分钟前
Nginx配置运行python的uvicorn项目
chrome·python·nginx
想用offer打牌27 分钟前
数据库大事务有什么危害(面试版)
数据库·后端·架构
逆向新手32 分钟前
js逆向-某省特种设备aes加密研究
javascript·爬虫·python·逆向·js
踏浪无痕35 分钟前
别再只会用 Feign!手写一个 Mini RPC 框架搞懂 Spring Cloud 底层原理
后端·面试·架构