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

#求助#python调用Arcmap完成以下处理流程#
已知目录 D:\asc结果文件 中含有多个以变量I、D命名的ASC文件,其中I可以从表“A.xlsx"的名为”强度“列读取,D可以从表“B.xlsx"中的名为“时间”列读取,asc结果文件的文件夹中asc文件被命名如:result40-1.asc result100-4.asc ……
!!
特别注意的是在jupter notebook中编写代码所使用的为python3.10.9,但电脑上安装的arcmap10.7自带的为python2.7
已在anaconda中配置了python27如下图

img


如顺利运行代码并解决问题,可追加酬金

现需要调用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

以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

思路:

  1. 首先读取 A.xlsx 和 B.xlsx 中的数据,存储到字典中,以文件名为键,强度或时间为值;
  2. 遍历 D:\asc结果文件 目录下的所有 ASC 文件,根据文件名提取出强度和时间信息,并根据 Spatial Analyst 工具下的重分类对 ASC 文件进行重分类;
  3. 对重分类后的文件进行属性表转 Excel 导出,并将所有 Excel 文件合并到一个表格中。

代码实现:

import os
import arcpy
import pandas as pd

# 设置工作空间
arcpy.env.workspace = r"D:\asc结果文件"
# 设置输出路径
output_path = r"D:\tif结果汇总表.xlsx"
# 设置分类规则
remap = arcpy.sa.RemapRange([[0, 1, 1], [1, 15, 2]])

# 读取 A.xlsx 和 B.xlsx 中的数据
a_df = pd.read_excel(r"A.xlsx")
b_df = pd.read_excel(r"B.xlsx")
a_dict = dict(zip(a_df["文件名"], a_df["强度"]))
b_dict = dict(zip(b_df["文件名"], b_df["时间"]))

# 遍历 ASC 文件进行重分类和属性表转 Excel 导出
result_list = []
for asc_file in os.listdir(arcpy.env.workspace):
    if asc_file.endswith(".asc"):
        # 解析文件名,获取强度和时间信息
        intensity = a_dict[asc_file.split(".")[0]]
        time = b_dict[asc_file.split(".")[0]]
        # 构造输出文件名
        output_file = "result{}-{}.tif".format(intensity, time)
        # 执行重分类操作
        out_raster = arcpy.sa.Reclassify(asc_file, "Value", remap, "NODATA")
        out_raster.save(output_file)
        # 执行属性表转 Excel 导出并存储结果
        output_excel = "{}.xlsx".format(output_file.split(".")[0])
        arcpy.TableToExcel_conversion(output_file, output_excel)
        result_list.append(pd.read_excel(output_excel))

# 将所有 Excel 文件合并到一个表格中
result_df = pd.concat(result_list, axis=1)
result_df.to_excel(output_path, index=False)

注意事项:

  1. 需要将 ArcMap 中的 python 环境添加到系统环境变量中,才能在 Jupyter Notebook 中调用 ArcPy 模块;
  2. 在使用 Spatial Analyst 工具下的重分类时,需要使用 arcpy.sa.RemapRange 函数来定义分类规则;
  3. 在属性表转 Excel 导出时,输出文件名需要使用 .xlsx 格式,否则可能会出现编码问题;
  4. 合并 Excel 文件时,需要使用 pd.concat 函数来将多个 DataFrame 拼接到一起。