首页 > 编程语言 >Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中

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

时间:2024-12-27 14:30:23浏览次数:7  
标签:stats val band Python excel 栅格数据 file np

@[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

相关文章

  • Python包管理不再头疼:uv工具快速上手
    Python包管理生态中存在多种工具,如pip、pip-tools、poetry、conda等,各自具备一定功能。而今天介绍的uv是Astral公司推出的一款基于Rust编写的Python包管理工具,旨在成为“Python的Cargo”。它提供了快速、可靠且易用的包管理体验,在性能、兼容性和功能上都有出色表现......
  • 南海区2021年C++甲组真题第3题——Excel地址
    题目描述Excel单元格的地址表示很有趣,它使用字母来表示列号。比如:A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,...当然Excel的最大列号是有限度的,所以转换起来不难。多多想把这种表示法一般化,把很大的数字转换为很长的字母序列。输入格式......
  • 啤酒行业竞争分析:Python爬虫技术揭示不为人知的秘密!
    在数字化时代,啤酒行业的竞争形势正经历着前所未有的变化。作为一名数据爱好者,我决定用Python爬虫技术来捕捉这一动态,并进行深入的数据分析。以下是我如何通过Python爬虫获取啤酒行业竞争形势数据,并将其保存到桌面进行分析的全过程。探索啤酒行业竞争形势:Python爬虫与数据分......
  • 生成excel文件(有备注和表头的情况)
    要使用Java导出Excel文件,并且通过@ExcelProperty注解进行列的映射,可以利用EasyExcel库。EasyExcel是阿里巴巴开源的一款高性能Excel读写工具,它支持通过注解将类与Excel的列进行映射,简化了Excel操作的复杂性。前提准备添加EasyExcel依赖到pom.xml文件中:<d......
  • Python基础——类和对象
    目录1.定义类2.创建对象3.类和对象的示例4.类的方法4.1实例方法4.2类方法4.3静态方法5.类的继承6.封装与多态在Python中,类(Class)和对象(Object)是面向对象编程的核心概念。通过类和对象,可以组织和管理代码,使得代码更加模块化、可重用和易于维护。下面详细介......
  • Python系列之例题100题(21-25题)
    Hello!友友们,废话不多说开始上干货!!!21:斐波那契数列:又称兔子数列,指的是这样一个数列:1,1,2,3,5,8,13,21,34,……编写程序找出第n个项。(结果为8)#递归deffib(n)ifn==1orn==2:return1else:returnfib(n-1)+fib(n-2)print(fib(6))#非递归n......
  • python+panddleocr+文本检测自定义数据集训练及测试
    python+panddleocr+文本检测自定义数据集训练及测试引言1相关链接2预训练模型及配置文件3文本检测的数据集格式文本检测训练测试1,标签转换(1)标签转换脚本(2)转换后的数据集结果2,训练(1)训练脚本(2)训练结果3,导出(1)导出脚本(2)导出结果4,测试......
  • python+panddleocr+文本方向分类训练导出测试
    python+panddleocr+文本方向分类训练导出测试引言采用角度分类器(反转180度判断)(1)Fan(2)Zheng方向分类器训练测试1,标签转换(1)标签转化脚本(2)转换后的数据集结果2,训练(1)命令行训练(2)训练脚本(3)训练结果3,模型导出(1)导出脚本(2)导出结果4,测试(1......
  • 计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计hadoop+spark+hive薪资预测 招聘推荐系统 招聘可视化大屏 招聘爬虫 Pyt
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......