You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环提取numpy数组统计值写入DataFrame报错解决

问题根因
  • 直接报错原因:代码中df[f"{name}"]=stats.values的写法,赋值的是字典的.values内置方法对象本身,没有执行取值操作,因此pandas将方法对象直接填入单元格,出现对应的方法内存地址提示。即使补充括号写为stats.values(),返回的也是字典值的动态视图,既无法保证和DataFrame行索引顺序匹配,也不支持pandas的按索引对齐赋值逻辑。
  • 索引拼写不匹配:初始化DataFrame时第四行索引写为medien,但统计结果字典中对应的键为median,二者拼写不一致,即使正确取值也会出现行匹配错位。
  • 循环逻辑缺陷:内层遍历波段的循环会反复覆盖同一极化名称对应的列,若单个栅格包含多个波段,最终列中只会保留最后一个波段的统计值,无法区分不同波段结果。
  • 统计逻辑偏差:rasterio读取的栅格数组默认保留NoData填充值,直接计算统计量会将无效值纳入计算,结果不符合实际业务要求。
修正代码
import rasterio
import numpy as np
import pandas as pd

# 初始化结果表,保证行索引名和统计项完全一致
df = pd.DataFrame(index=["min", "max", "mean", "median"])

# 整理待处理栅格的路径与对应列名,后续批量新增文件只需补充键值对
raster_config = {
    "HH": r"E:\SAOCOM\1A1B\Images\Griffin\130122\Source\Data\gtc-acqId0000705076-a-sm9-2201150146-hh-h.tif",
    "VV": r"E:\SAOCOM\1A1B\Images\Griffin\130122\Source\Data\gtc-acqId0000705076-a-sm9-2201150146-vv-h.tif",
    "VH": r"E:\SAOCOM\1A1B\Images\Griffin\130122\Source\Data\gtc-acqId0000705076-a-sm9-2201150146-vh-h.tif",
    "HV": r"E:\SAOCOM\1A1B\Images\Griffin\130122\Source\Data\gtc-acqId0000705076-a-sm9-2201150146-hv-h.tif"
}

for col_name, tif_path in raster_config.items():
    # 用上下文管理器自动关闭文件连接,避免内存泄漏
    with rasterio.open(tif_path) as src:
        # 单波段SAR数据默认读取第1波段,多波段场景可自行调整遍历逻辑
        band = src.read(1)
        # 掩膜NoData无效值
        nodata = src.nodata
        valid_data = band[band != nodata] if nodata is not None else band.flatten()
        
        # 按行索引顺序传入统计值,自动对齐赋值
        df[col_name] = [
            valid_data.min(),
            valid_data.max(),
            valid_data.mean(),
            np.median(valid_data)
        ]

print(df)
批量处理优化建议
  • 处理大量分散在不同文件夹的tif时,可使用pathlib.Path.rglob("*.tif")递归遍历目标根目录下所有tif文件,自动提取文件名作为列名,无需手动逐个配置路径。
  • 处理多波段栅格时,可给列名增加波段后缀(如HH_band1、HH_band2),避免循环覆盖同名列。
  • 单文件尺寸超过内存容量时,可采用rasterio分块读取逻辑逐窗口统计,避免内存溢出。

内容的提问来源于stack exchange,提问作者Naama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:09:36