python调用Arcmap完成批量重分类及属性表导出及合并

#求助#python调用Arcmap完成以下处理流程#
已知目录 D:\asc结果文件 中含有多个以变量I、D命名的ASC文件,其中I可以从表“A.xlsx"的名为”强度“列读取,D可以从表“B.xlsx"中的名为“时间”列读取,asc结果文件的文件夹中asc文件被命名如:result40-1.asc result100-4.asc ……

现需要调用arcmap完成以下批量处理操作:
1.使用Spatial Analyst工具下的重分类对所有的asc文件进行重分类,输入栅格为各个asc文件,重分类字段为VALUE,分类具体要求为:旧值0-1,赋新值为1,旧值1-15,则赋新值为2,输出文件名称与输入的asc保持一致,但输出格式修改为tif格式,即 resultI-D.tif ,I与D值与asc保持一致
2.对输出的所有tif的属性表进行 表转excel 导出,
其中原属性表的格式为
示例:result40-1.tif

| OID | Value | Count |
| 0 | 1 | 1800 |
| 1 |2 | 3446 |
将所有的属性表导出并合并,要求的格式为

| Tif文件名 | Count1 | Count2|
| result40-1 |1800 | 3446 |
| result40-2 | …… | …… |
| result100-4 | …… | …… |
合并的表的路径及名称为 D:\tif结果汇总表.xlsx

基于Monster 组和GPT的调写:

import arcpy
import pandas as pd
import os

# 设置工作环境
arcpy.env.workspace = "D:/asc结果文件"
arcpy.CheckOutExtension("Spatial")

# 读取表格
df_intensity = pd.read_excel("A.xlsx")
df_time = pd.read_excel("B.xlsx")

# 遍历asc文件,进行重分类
for i in df_intensity['强度']:
    for d in df_time['时间']:
        # 构建输入输出文件路径
        input_raster = "result{}-{}.asc".format(str(i), str(d))
        output_raster = "result{}-{}.tif".format(str(i), str(d))
        # 执行重分类
        remap = arcpy.sa.RemapRange([[0, 1, 1], [1, 15, 2]])
        out_raster = arcpy.sa.Reclassify(input_raster, "VALUE", remap, "NODATA")
        out_raster.save(output_raster)

# 提取属性表并转换为Excel
output_excel = "D:/tif结果汇总表.xlsx"
for root, dirs, files in os.walk(arcpy.env.workspace):
    for file in files:
        if file.endswith(".tif"):
            # 提取属性表
            input_raster = os.path.join(root, file)
            table_name = arcpy.ValidateTableName("table", arcpy.env.workspace)
            arcpy.TableToTable_conversion(input_raster, arcpy.env.workspace, table_name)
            table = os.path.join(arcpy.env.workspace, table_name)
            # 提取Count字段并汇总
            with arcpy.da.SearchCursor(table, ['VALUE', 'Count']) as cursor:
                count_dict = {}
                for row in cursor:
                    count_dict[row[0]] = row[1]
            # 构建新行数据
            new_row = {'Tif文件名': os.path.splitext(file)[0]}
            for key, value in count_dict.items():
                new_row['Count' + str(key)] = value
            # 添加到输出表格
            if not os.path.isfile(output_excel):
                pd.DataFrame(columns=new_row.keys()).to_excel(output_excel, index=False)
            pd.DataFrame([new_row]).to_excel(output_excel, index=False, header=False, mode='a')

# 释放Spatial Analyst扩展许可
arcpy.CheckInExtension("Spatial")