Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中

@[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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值