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

使用pandas的append方法向DataFrame添加数据失败问题求助

问题原因
  • 核心错误:pandas 的DataFrame.append()方法不修改原始DataFrame对象,仅返回拼接后的新DataFrame。你的代码未将拼接结果赋值回df1,因此df1始终为空。
  • 优化提示:你使用的arcpy.SearchCursor是ArcPy已废弃的旧版游标接口,推荐使用性能更高、资源占用更优的arcpy.da.SearchCursor替代。
修复方案

最小修改版本

仅修改append行的赋值逻辑即可得到正确结果:

import arcpy
from arcpy import env
import pandas as pd

# setting workspace
env.workspace = r"C:\Users\4_projects\211104\Network.gdb"
env.overwriteOutput = True  # existing output will be overwritten
buchs = r"buchs"

rows = arcpy.SearchCursor(buchs)
shapeName = arcpy.Describe(buchs).shapeFieldName

df1 = pd.DataFrame()

for row in rows:
    feat = row.getValue(shapeName)
    extent = feat.extent
    df2 = pd.DataFrame({"XMin": [extent.XMin],
                "YMin": [extent.YMin],
                "XMax": [extent.XMax],
                "YMax": [extent.YMax]})
    # 新增赋值操作,将拼接后的新DataFrame赋值给df1
    df1 = df1.append(df2, ignore_index=True)

注意:DataFrame.append()方法已在pandas 2.0及以上版本中正式移除,如果你使用的是较新的pandas版本,请直接使用优化版本的方案。

更高效的优化版本

循环中频繁创建DataFrame并拼接会产生大量额外性能开销,推荐先将所有范围值存入列表,最后一次性转换为DataFrame,同时替换为新版游标接口:

import arcpy
from arcpy import env
import pandas as pd

env.workspace = r"C:\Users\4_projects\211104\Network.gdb"
env.overwriteOutput = True
buchs = r"buchs"
shape_name = arcpy.Describe(buchs).shapeFieldName

# 先初始化列表存储所有范围数据
extent_list = []
# 使用新版da.SearchCursor遍历要素
with arcpy.da.SearchCursor(buchs, [shape_name]) as cursor:
    for row in cursor:
        extent = row[0].extent
        extent_list.append({
            "XMin": extent.XMin,
            "YMin": extent.YMin,
            "XMax": extent.XMax,
            "YMax": extent.YMax
        })

# 一次性转换为DataFrame
df1 = pd.DataFrame(extent_list)

该版本运行速度更快,尤其当要素数量较多时性能优势会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:07