Processing math: 100%

1 votos

Utilizar un cursor de búsqueda para calcular un nuevo campo

Soy nuevo en ArcPy. Lo que esencialmente estoy tratando de hacer es usar ArcPy para buscar a través de una columna en una tabla y si está entre un rango para imprimir un valor en un nuevo columna correspondiente. Supongo que voy a utilizar un cursor de búsqueda para iterar un bucle algo así como:

table = ("file path to table")
field = ("name of column")
cursor = arcpy.SearchCursor(table)
for row in cursor:
    row.getValue(field)
         if ((field >0) & (field < 10)

          *in new column print 1*??

Tengo cuatro rangos diferentes por los que necesito que pase la columna, pero no sé cómo hacer que coloque los números del cálculo en un nuevo campo... ¿Tengo que utilizar la herramienta CalculateField_management en su lugar?

3voto

Anton8000 Puntos 165

SearchCursor sólo devuelve filas, no puedes cambiar los datos con él. Para actualizar necesitas da.ActualizarCursor :

UpdateCursor establece el acceso de lectura y escritura a los registros devueltos por un clase o tabla de características.

import arcpy

table = r"C:\folder\data.gdb\table123" #Change
fields = ["column1, column2"] #Change to match your field names

with arcpy.da.UpdateCursor(table,fields) as cursor:
    for row in cursor:
        if 0 < row[0] < 10: #row[0] = first field in fields
            row[1] = whatever you like #index 1 = second field in list
        elif 10 < row[0] < 20:
            row[1] = something
        #insert more elifs here
        else:
            continue
        cursor.updateRow(row)

0voto

Haley Herrick Puntos 11

He podido conseguir que funcione:

import arcpy
from arcpy import env
import os
import string

## workspace and variables
env.workspace = (r"D:\Grad_School\Programming\Final\output.gdb")

##variables
intable = "name of table"
#new field for calculation
arcpy.AddField_management(intable, "calculation", "SHORT")
fieldname = "Field You Want To Look At"
expression = "getClass(!fieldname!)"
codeblock = """def getClass(fieldname):
if fieldname <= 5000:
    return 1
elif fieldname > 5000 and fieldname < 20000:
    return 2
else:
    return 3"""
# execute CalculateField tool, populate new column
arcpy.CalculateField_management(intable, "calculation", expression, "PYTHON_9.3", codeblock)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X