【问题标题】:Append function does not add anything to the panda dataframe附加功能不会向熊猫数据框添加任何内容
【发布时间】:2021-11-05 10:07:31
【问题描述】:

我有以下代码:

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]})
    df1.append(df2, ignore_index=True)

我的目标是通过创建一个临时 df df2 从每个 row 提取 X 和 Y 范围,然后将其附加到 df1。所以df1 应该是一行一行的,每个条目的所有范围。但是,我的 df1always 会导致一个空的 df。

感谢任何帮助。如果需要其他数据,请让我知道如何在此处最好地共享 shapefile,谢谢。

【问题讨论】:

  • 您能否分享您的文件样本Network.gdb(wetransfer、Dropbox,...),好吗?也许你可以使用 Geopandas。
  • 另外,您可以更改您的模式以构建df1。最好的策略是在 dict 或 list 等 python 数据结构中收集数据,最后使用pd.concat 构建您的数据框。

标签: python pandas dataframe arcpy


【解决方案1】:

Pandas DataFrame.append() 必须分配给一个变量,否则它会附加另一个数据帧,但永远不会分配它,并且一旦附加完成它就消失了,所以只需在附加前添加df1 =

    df1 = df1.append(df2, ignore_index=True)

【讨论】:

    【解决方案2】:

    与我上面的评论相关的可能解决方案:

    data = []
    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]})
        data.append(df2)
    
    df1 = pd.concat(data, ignore_index=True)
    

    【讨论】:

      【解决方案3】:

      而不是

      df1.append(df2, ignore_index=True)
      

      你可以使用

      df1 = pd.concat([df1, df2])
      

      如果所有列都匹配

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多