Python實現(xiàn)為Excel中每個單元格計算其在文件中的平均值
本文介紹基于Python語言,對大量不同的Excel文件加以跨文件、逐單元格平均值計算的方法。
首先,我們來明確一下本文的具體需求。現(xiàn)有一個文件夾,其中有如下所示的大量Excel文件,我們這里就以 .csv
文件為例來介紹。其中,每一個 .csv
文件的名稱都是如下圖所示的 Ref_XXX_Y.csv
格式的,其中 XXX
表示三個字母,后面的 Y
則表示若干位數(shù)字。
對于其中的每一個 .csv
文件,都有著如下圖所示的數(shù)據(jù)格式。
我們現(xiàn)在的需求是,希望對于每一個名稱為 Ref_GRA_Y.csv
格式的 .csv
文件,求取其中每一個單元格在所有文件中數(shù)據(jù)的平均值。例如,對于上圖中 DOY
為 1
的 blue
這個單元格,那么求出來的平均值就是在全部名稱為 Ref_GRA_Y.csv
格式的 .csv
文件之中, DOY
為 1
且列名為 blue
的單元格的平均值。此外,如果像上圖一樣,出現(xiàn)了部分單元格數(shù)值為 0
的情況,表明在當(dāng)前文件夾下,這個單元格是沒有數(shù)據(jù)的,因此需要在計算的時候舍去(并且取平均值時候的分母也要減小 1
)。
知道了需求,我們就可以開始代碼的書寫。其中,本文用到的具體代碼如下所示。此外,本文實現(xiàn)的需求也和我們之前的文章基于Python讀取多個Excel文件數(shù)據(jù)并跨越不同xlsx表格文件計算平均值有些類似,大家如果有需要,也可以參考之前的這一篇文章。
# -*- 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)
其中,上述代碼的具體介紹如下。
首先,我們導(dǎo)入必要的庫—— os
庫用于文件路徑操作, glob
庫用于文件匹配, pandas
庫用于數(shù)據(jù)處理和分析。同時,我們定義文件夾路徑 folder_path
,代表存儲 .csv
文件的文件夾路徑;定義輸出路徑 output_path
,代表保存結(jié)果文件的路徑;定義文件匹配模式 file_pattern
,用于匹配需要處理的 .csv
文件的文件名模式。
隨后,我們使用 glob.glob()
函數(shù)結(jié)合文件夾路徑和文件匹配模式,獲取滿足條件的 .csv
文件的路徑列表,存儲在 file_paths
變量中。創(chuàng)建一個空的數(shù)據(jù)框 combined_data
,用于存儲所有文件的數(shù)據(jù)。
接下來,我們使用一個循環(huán),遍歷 file_paths
列表中的每個文件路徑。對于每個文件路徑,使用 pd.read_csv()
函數(shù)加載 .csv
文件,并將其存儲在名為 df
的數(shù)據(jù)框中。其次,使用條件篩選語句 df[df != 0]
排除值為 0
的數(shù)據(jù),并將結(jié)果存儲在名為 df_filtered
的數(shù)據(jù)框中。緊接著,將當(dāng)前文件的數(shù)據(jù)框 df_filtered
合并到總數(shù)據(jù)框 combined_data
中,這一步驟使用 pd.concat()
函數(shù)實現(xiàn)。
完成所有文件的處理后,使用 combined_data.groupby('DOY').mean()
計算所有文件的平均值,按照 DOY
列進行分組并求平均值。隨后,定義輸出文件名 output_file
,代表保存平均值結(jié)果的文件名。
最后,使用 os.path.join()
函數(shù)結(jié)合輸出路徑和輸出文件名,生成保存路徑,并使用 average_values.to_csv()
函數(shù)將平均值數(shù)據(jù)框 average_values
保存為一個新的 .csv
文件,指定 index=True
以包含索引列。
運行上述代碼,我們即可得到結(jié)果文件。如下圖所示,可以看到結(jié)果文件中,已經(jīng)是計算之后的平均值結(jié)果了。
至此,大功告成。
到此這篇關(guān)于Python實現(xiàn)為Excel中每個單元格計算其在文件中的平均值的文章就介紹到這了,更多相關(guān)Python計算平均值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python面向?qū)ο笕筇卣鳎豪^承、封裝和多態(tài)的深度解析
在面向?qū)ο蟪绦蛟O(shè)計中,對象可以看做是數(shù)據(jù)(特性)以及由一系列可以存取、操作這些數(shù)據(jù)的方法所組成的集合,Python是面向?qū)ο蟮恼Z言,支持面向?qū)ο缶幊痰娜筇匦裕豪^承、封裝(隱藏)、多態(tài),本文將逐一講解Python的三大特性2025-01-01解決python 執(zhí)行shell命令無法獲取返回值的問題
這篇文章主要介紹了解決python 執(zhí)行shell命令無法獲取返回值的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Python數(shù)據(jù)序列化技術(shù)總結(jié)
在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)序列化是一個關(guān)鍵環(huán)節(jié),它允許我們將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可存儲或可傳輸?shù)母袷?,Python提供了多種數(shù)據(jù)序列化技術(shù),每種技術(shù)都有其獨特的性能優(yōu)勢和適用場景,本文將詳細介紹幾種強大的Python數(shù)據(jù)序列化技術(shù),需要的朋友可以參考下2025-03-03Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作
這篇文章主要介紹了Python連接數(shù)據(jù)庫并批量插入包含日期記錄的操作,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06python開發(fā)之a(chǎn)naconda以及win7下安裝gensim的方法
這篇文章主要介紹了python開發(fā)之a(chǎn)naconda以及win7下安裝gensim的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07