本文介绍基于Python语言,基于Excel表格文件内某一列的数据,计算这一列数据在每一个指定数量的行的范围内(例如每一个4
行的范围内)的区间最大值的方法。
已知我们现有一个.csv
格式的Excel表格文件,其中有一列数据,我们希望对其加以区间最大值的计算——即从这一列的数据部分(也就是不包括列名的部分)开始,第1
行到第4
行之间的最大值、第5
行到第8
行的最大值、第9
行到第12
行的最大值等等,加以分别计算每4
行中的最大值;此外,如果这一列数据的个数不能被4
整除,那么到最后还剩余几个,那就对这几个加以最大值的求取即可。
明确了需求,我们即可开始代码的撰写;具体如下所示。
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 26 12:24:58 2023
@author: fkxxgis
"""
import pandas as pd
def calculate_max_every_eight_rows(excel_file, column_name):
df = pd.read_csv(excel_file)
column_data = df[column_name]
max_values = []
for i in range(0, len(column_data), 4):
max_values.append(column_data[i:i+4].max())
return max_values
excel_file = r"C:\Users\15922\Desktop\data_table_1.csv"
column_name = 'NDVI'
result = calculate_max_every_eight_rows(excel_file, column_name)
rdf = pd.DataFrame(result, columns = ["Max"])
output_file = r"C:\Users\15922\Desktop\data.csv"
rdf.to_csv(output_file, index = False)
在这里,我们定义一个函数calculate_max_every_eight_rows
(因为一开始我为了计算8
个数据的区间最大值,所有函数名称是eight
,大家理解即可),接受两个参数,分别为输入文件路径excel_file
,以及要计算区间最大值对应的那一列的列名column_name
。
在函数中,我们首先读取文件,将数据保存到df
中;接下来,我们从中获取指定列column_name
的数据,并创建一个空列表max_values
,用于保存每个分组的最大值。随后,使用range
函数生成从0
开始,步长为4
的索引序列,以便按每4
行进行分组;这里大家按照实际的需求加以修改即可。在每个分组内,我们从column_data
中取出这对应的4
行数据,并计算该分组内的最大值,将最大值添加到max_values
列表中。最后,函数返回保存了每个分组最大值的列表max_values
。
其次,我们通过excel_file
指定输入的文件路径,通过column_name
指定要处理的列名,随后即可调用calculate_max_every_eight_rows
函数,并将返回的结果保存到result
变量中,该结果是一个包含了每个分组最大值的列表。
随后,我们为了将最大值结果保存,因此选择将result
列表转换为一个新的DataFrame格式数据rdf
,并指定列名为Max
。最后,通过rdf.to_csv()
:将这个rdf
保存为一个新的.csv
格式文件,并设置index=False
以不保存索引列。
执行上述代码,我们即可获得结果文件。如下图所示,为了方便对比,我们这里就将结果文件复制到原来的文件中进行查看。可以看到,结果列中第1
个数字,就是原始列中前4
行的最大值;结果列中第3
个数字,则就是原始列中第9
行到12
行的最大值,以此类推。
至此,大功告成。
欢迎关注:疯狂学习GIS