@[Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中
import os
import rasterio
import numpy as np
import pandas as pd
def collect_tif_stats(root_dir, process_all_bands=False):
stats_list = []
# 遍历文件夹和子文件夹
for subdir, _, files in os.walk(root_dir):
for file in files:
if file.lower().endswith(('.tif', '.tiff')):
file_path = os.path.join(subdir, file)
try:
# 打开并读取栅格文件
with rasterio.open(file_path) as src:
num_bands = src.count # 获取波段数
for band_idx in range(1, num_bands + 1):
if not process_all_bands and band_idx > 1:
break # 如果不需要处理所有波段,则在此处停止`在这里插入代码片`
band = src.read(band_idx) # 读取当前波段
# 假设NoData值被设置为-128
nodata_value = -128
# 创建一个与band形状相同的布尔数组,用于标记非NoData值
valid_data = band != nodata_value
# 使用valid_data数组来计算统计值,只包括非NoData值
max_val = np.max(band[valid_data])
min_val = np.min(band[valid_data])
mean_val = np.mean(band[valid_data])
# 注意:计算标准差时,需要考虑数据点的数量,但由于我们排除了NoData值,
# NumPy的std函数会自动处理这个问题(它使用有效数据点的数量来计算)
std_val = np.std(band[valid_data])
# 计算统计值
# max_val = np.max(band)
# min_val = np.min(band)
# mean_val = np.mean(band)
# std_val = np.std(band)
# 存储统计值,包括波段索引(如果需要)
stats_entry = {
'文件名': file,
'波段': band_idx,
'最大值': max_val,
'最小值': min_val,
'均值': mean_val,
'标准差': std_val
}
stats_list.append(stats_entry)
except Exception as e:
print(f"处理文件 {file_path} 时出错: {e}")
return stats_list
def save_stats_to_excel(stats_list, output_excel):
# 创建DataFrame
df = pd.DataFrame(stats_list)
# 确保输出路径是一个文件名,而不是文件夹路径
if not output_excel.lower().endswith(('.xlsx', '.xls')):
output_excel += '.xlsx' # 默认添加.xlsx扩展名
# 保存到Excel文件
df.to_excel(output_excel, index=False)
print(f"统计结果已保存到 {output_excel}
# 主函数
if __name__ == "__main__":
# 指定要处理的文件夹路径
root_directory = 'tif存储目录'
# 指定输出Excel文件的完整路径和文件名
output_excel_file = '输出的excel存储目录/tif_stats.xlsx'
# 收集统计值,默认为只处理第一个波段
stats_list = collect_tif_stats(root_directory)
# 如果想要处理所有波段,可以将process_all_bands设置为True
# stats_list = collect_tif_stats(root_directory, process_all_bands=True)
# 将统计值保存到Excel文件
save_stats_to_excel(stats_list, output_excel_file)
标签:stats,val,band,Python,excel,栅格数据,file,np
From: https://blog.csdn.net/BigSun1993/article/details/144767561