获取栅格的统计数据并导出至CSV

from osgeo import gdal
import os
import pandas as pd
path = r"D:\GPP\0_data\4_VPM_GPP\11_IGBP_00_16_result\1_EBF"  # 文件路径
path_list = os.listdir(path)
tif_files = list()  # 创建一个只装tif格式的列表
for filename in path_list:  # 遍历
    # 用于分割文件名,将文件名分为两部分:文件的名称部分和文件的扩展名部分,返回值是一个包含两个元素的元组,第一个元素是文件名的名称部分,第二个元素是文件的扩展名部分(包括 . 符号)
    if os.path.splitext(filename)[1] == '.tif':
        tif_files.append(filename)  # 将原文件夹的tif文件加入只有tif的列表

min = []
max = []
mean = []
std = []
num = []
sum = []
for tif in tif_files:
    dataset = gdal.Open(path+'\\'+tif)
    data_width = dataset.RasterXSize
    data_height = dataset.RasterYSize
    data = dataset.ReadAsArray(0, 0, data_width, data_height)  # 读取整个 tif 为数组
    count = 0
    # 过滤无效值
    for i in range(0, data_height):
        for j in range(0, data_width):
            if data[i, j] >= 0:
                count = count+1
    num.append(count)

    band = dataset.GetRasterBand(1)
    # ComputeStatistics()方法将返回一个包含波段数据简单统计指标(具体为最小值,最大值,平均值和标准差)的列表
    # 参数为True时表示对数据进行抽样统计,参数为False表示统计所有像元值
    statistics = band.ComputeStatistics(False)
    min.append(statistics[0])
    max.append(statistics[1])
    mean.append(statistics[2])
    std.append(statistics[3])
    sum.append(statistics[2]*count)

    print(statistics)
df = pd.DataFrame({'number': range(1, len(tif_files) + 1), 'file_name': tif_files, 'min': min, 'max': max, 'mean': mean,'count':num, 'sum': sum, 'std': std})
df.to_csv(r"D:\pythonProject\python_GIS_study\VPM_EBF_2000_statistics.csv", index=False, encoding='utf-8')
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值