Utilizar la herramienta Calcular campo

La herramienta Calcular campo se encuentra en la caja de herramientas de Administración de datos en el conjunto de herramientas Campos. Esta es la misma herramienta que se abre cuando hace clic en el comando Calculadora de campo del menú de acceso directo de campo de una tabla de atributos. Cuando realiza cálculos de campo, es importante saber qué tipo de datos utiliza y en qué contexto se van a utilizar en el futuro. La sintaxis que debe utilizarse en la expresión del cálculo difiere según la fuente de datos y el idioma de la secuencia de comandos.

A continuación se incluyen varios consejos importantes y mejores prácticas para utilizar la herramienta Calcular campo.

Consejos y mejores prácticas para utilizar la herramienta Calcular campo

Calcula los valores de un campo para una clase de entidad, una capa de entidades o un catálogo de ráster.

Las expresiones pueden crearse con VBScript o un formato Python estándar. El estilo de formato de la cadena utilizada para la expresión debe ser apropiado para el entorno (tipo).

Se pueden crear expresiones en Python utilizando las propiedades del objeto Geometry incluyendo type, extent, centroid, firstPoint, lastPoint, area, length, isMultipart y partCount (por ejemplo, !shape.area!).

Las expresiones de Python pueden utilizar las propiedades area y length de geometría con una unidad lineal o de área para convertir el valor en una unidad de medida diferente (por ejemplo, !shape.length@kilometers!). Si los datos se almacenan en un sistema de coordenadas geográficas y se proporciona una unidad lineal (por ejemplo, millas), la longitud se calculará mediante un algoritmo geodésico. Utilizar unidades de área en los datos geográficos producirá resultados cuestionables ya que los grados decimales no son consistentes en el globo.

!shape.area@acres!

Cuando se utiliza con un conjunto seleccionado de entidades, como las creadas a partir de una consulta en Crear capa de entidades o Seleccionar capa por atributo, esta herramienta solamente actualiza los registros seleccionados.

El cálculo solamente se puede aplicar a un campo por operación.

Los campos siempre se encierran en corchetes [ ] para VBScript.

En los cálculos en Python, los nombres de campo deben estar entre signos de admiración (!fieldname!).

Para calcular cadenas de caracteres para campos de texto o de caracteres, en el cuadro de diálogo la cadena debe estar entre comillas dobles ("cadena") y, en una secuencia de comandos, la cadena entre comillas dobles también debe estar entre comillas simples ('"cadena"').

Esta herramienta también se puede utilizar para actualizar elementos de caracteres. Las expresiones que utilizan una cadena de caracteres deben estar entre comillas simples, por ejemplo, [CHARITEM] = 'NEW STRING'. Sin embargo, si la cadena de caracteres ya tiene comillas simples, se deben encerrar entre comillas dobles, por ejemplo, [CHARITEM] = "TYPE'A'".

Para calcular un campo para que sea un valor numérico, introduzca el valor numérico en el parámetro Expresión; no se requieren comillas para este valor.

La función arcgis.rand() es compatible con la herramienta Calcular campo y el tipo de expresión debe ser Python. La función arcgis.rand() se creó para las herramientas de ArcGIS y no debe confundirse con la función Python Rand().

La expresión y el código bloque están conectados. El código bloque debe estar relacionado con la expresión; el resultado del código bloque se debe pasar a la expresión.

El módulo y el formato de matemática de Python están disponibles para utilizarse en el parámetro Código bloque. Puede importar módulos adicionales. El módulo de matemática proporciona funciones de teoría de números y de representación, funciones potencia y logarítmicas, funciones trigonométricas, funciones de conversión angular, funciones hiperbólicas y constantes matemáticas. Para obtener más información sobre el módulo de matemática, consulte la ayuda de Python.

Los archivos .cal VB guardados de versiones anteriores de ArcGIS pueden funcionar o pueden precisar modificaciones mínimas. Si tiene código VBA de versiones anterior que utilizan ArcObjects, deberá modificar los cálculos para que funcionen.

Cuando calcula datos unidos, no puede calcular directamente las columnas unidas. Sin embargo, puede calcular directamente las columnas de la tabla de origen. Para calcular los datos unidos, primero debe agregar las tablas o capas unidas a ArcMap. Después puede realizar cálculos en estos datos por separado. Estos cambios se reflejarán en las columnas que se unieron.

El tipo de expresión debe ser Python cuando ejecuta Calcular campo con ArcGIS 10.1 Engine o ArcGIS for Server. Utilice solo Python como el tipo de expresión siempre que la herramienta se incluya en un modelo que se publicará en ArcGIS for Server.

Ejemplos de código bloque con la herramienta Calcular campo

Ejemplo de CalculateField: calcular centroides

Utilice CalculateField para asignar valores del centroide a campos nuevos.

# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields

# Import system modules
import arcpy

try: 
    # Set environment settings
    arcpy.env.workspace = "C:/data/airport.gdb"
 
    # Set local variables
    inFeatures = "parcels"
    fieldName1 = "xCentroid"
    fieldName2 = "yCentroid"
    fieldPrecision = 18
    fieldScale = 11
 
    # Add fields
    arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                              fieldPrecision, fieldScale)
    arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                              fieldPrecision, fieldScale)
 
    # Calculate centroid
    arcpy.CalculateField_management(inFeatures, fieldName1, 
                                    "!SHAPE.CENTROID.X!",
                                    "PYTHON_9.3")
    arcpy.CalculateField_management(inFeatures, fieldName2, 
                                    "!SHAPE.CENTROID.Y!",
                                    "PYTHON_9.3")
except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print("Line {0}".format(tb.tb_lineno))
    print(e.message)

Ejemplo de CalculateField: calcular rangos

Utilice CalculateField con un código bloque para calcular los valores basados en rangos.

# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
#  based on ranges

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"
codeblock = """def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", 
                                codeblock)

Ejemplo de CalculateField: calcular valores aleatorios

Utilice CalculateField para asignar valores aleatorios al campo nuevo.

# Name: CalculateField_Random.py
# Description: Use CalculateField to assign random values to a new field


# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "arcgis.rand('Integer 0 10')"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON_9.3")

Temas relacionados

5/10/2014