Calcular campo (Administración de datos)

Resumen

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

Uso

    Precaución:

    Esta herramienta modifica los datos de entrada. Consulte Herramientas que modifican o actualizan los datos de entrada para obtener más información y estrategias para evitar cambios de datos no deseados.

  • Para obtener más información sobre las expresiones de Python, consulte Ejemplos de Calcular campo de Python.

    Para obtener más información sobre las expresiones de Arcade, consulte la Guía de ArcGIS Arcade.

    Para obtener más información sobre las expresiones de SQL, consulte Calcular valores de campo.

    Para obtener más información sobre las expresiones de VBScript, consulte Ejemplos de Calcular campo de VBScript.

  • Cuando se utiliza con un conjunto seleccionado de entidades, como las creadas a partir de una consulta utilizando la herramienta 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. Para aplicar varios cálculos, utilice la herramienta Calcular campos.

  • Los valores de campo existentes se sobrescriben. Para conservar los valores originales, haga una copia de la tabla de entrada como copia de seguridad o utilice la opción Habilitar deshacer del panel Geoprocesamiento.

  • En los cálculos de Python, los nombres de campo deben estar entre signos de exclamación (por ejemplo, !fieldname!).

    En los cálculos de Arcade, los nombres de campo deben tener el prefijo $feature. (por ejemplo, $feature.fieldname).

  • Para los cálculos relacionados con la transferencia de valores temporales entre distintos tipos de campo, considere utilizar como alternativa la herramienta Convertir campo temporal.

  • Para calcular cadenas para campos de texto o de caracteres, en el cuadro de diálogo la cadena debe estar entre comillas dobles (por ejemplo, "cadena") y, en un script, la cadena entre comillas dobles también debe estar entre comillas simples (por ejemplo, '"string"').

  • Si desea calcular un campo para que sea un valor numérico, introduzca el valor numérico en el parámetro Expresión sin encerrar el valor entre comillas.

  • Heredado:

    arcgis.rand() ya no se admite desde ArcGIS AllSource 2.0. En su lugar, se deben usar otras funciones similares del módulo random de Python. Para usar correctamente el módulo random, agréguelo como importación en el parámetro Bloque de código.

  • Puede crear expresiones complejas utilizando el parámetro Bloque de código. Introduzca el bloque de código directamente en el cuadro de diálogo o como una cadena en el script. La expresión y el bloque de código están conectados. El bloque de código debe estar relacionado con la expresión; el resultado del bloque de código se debe pasar a la expresión.

    El parámetro Bloque de código solo se admite en expresiones de Python.

  • Puede utilizar el módulo Python math y formatear en el parámetro Bloque de código. También puede importar módulos adicionales. El módulo math proporciona funciones de representación y de teoría de números, 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 math, consulte la Ayuda de Python.

  • Para calcular la información de geometría en Python, use las propiedades de objeto Geometry. Por ejemplo, utilice una expresión de !shape.pointCount! para calcular el número de vértices de una entidad.

    Nota:

    La herramienta Calcular atributos de geometría admite cálculos similares.

    Para calcular el área y la longitud en Python, use los métodos getArea y getLength con un método y un tipo de unidad.

    • Para calcular el área geodésica de polígonos en kilómetros cuadrados, utilice la siguiente expresión:
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • Para calcular la longitud plana de polilíneas (o polígonos) en yardas, utilice la siguiente expresión:
      !shape.getArea('PLANAR', 'YARDS')

    Consulte los objetos Polygon y Polyline para obtener más información.

    Más información sobre las herramientas de geoprocesamiento y las unidades lineales y de área

  • Las aplicaciones de ArcGIS usan la codificación UTF-16-LE para la lectura y escritura de archivos .cal. Otras aplicaciones (por ejemplo, Notepad) se pueden utilizar para crear o modificar archivos .cal, siempre que el archivo se escriba usando la codificación UTF-16-LE. Un archivo con cualquier otra codificación no se cargará en el bloque de código.

  • Si trabaja con datos vinculados, solo puede actualizar los campos de la tabla de origen. No se pueden actualizar los campos de la tabla vinculada. Para realizar un cálculo en la tabla vinculada, realice el cálculo directamente en esa tabla.

  • Las expresiones de Python que intentan concatenar campos de cadena de caracteres que incluyen un nulo o dividen entre un valor cero devolverán nulo para ese valor de campo.

  • Las expresiones SQL permiten cálculos más rápidos en servicios de entidades y geodatabases corporativas. En lugar de realizar cálculos entidad por entidad o fila por fila, se define una sola solicitud para el servidor o la base de datos, lo cual genera cálculos más rápido.

    Solamente los servicios de entidades y las geodatabases corporativas son compatibles con expresiones de SQL. Para otros formatos, utilice expresiones de Python o Arcade.

    El uso de la opción SQL para el parámetro Tipo de expresión presenta las siguientes limitaciones:

    • La opción solo se admite con geodatabases corporativas de Db2, Oracle, PostgreSQL, SAP HANA y SQL Server.
    • No se admite el cálculo de valores de campo en tablas unidas.
    • Los datos de geodatabase corporativa versionados y archivados no son compatibles.
    • No es posible deshacer operaciones de geoprocesamiento.

    Consulte la ayuda de las expresiones SQL en la documentación del proveedor de base de datos.

  • El parámetro Expresión del cuadro de diálogo de la herramienta tiene una lista desplegable Insertar valores en la que puede agregar valores de campo del campo seleccionado en la lista Campos o valores de dominio del dominio del campo seleccionado. Utilice los valores de dominio para asegurarse de que solo se insertan en el campo valores válidos para el dominio del campo.

Parámetros

EtiquetaExplicaciónTipo de datos
Tabla de entrada

Tabla que contiene el campo que se actualizará con el cálculo nuevo.

Mosaic Layer; Raster Layer; Table View
Nombre de campo (existente o nuevo)

Campo que se actualizará con el cálculo nuevo.

Si no existe ningún campo con el nombre especificado en la tabla de entrada, se agregará.

Field
Expresión

Expresión de cálculo simple que se utiliza para crear un valor que completará las filas seleccionadas.

SQL Expression
Tipo de expresión
(Opcional)

Especifica el tipo de expresión que se utilizará.

Si la entrada es un servicio de entidad, el tipo de expresión predeterminado es SQL. Para cualquier otro tipo de entrada, el tipo de expresión predeterminado es Python.

Para obtener más información sobre las expresiones de Python, consulte Ejemplos de Calcular campo de Python.

Para obtener más información sobre las expresiones de Arcade, consulte la Guía de ArcGIS Arcade.

Para obtener más información sobre las expresiones de SQL, consulte Calcular valores de campo.

Las expresiones SQL permiten cálculos más rápidos en servicios de entidades y geodatabases corporativas. En lugar de realizar cálculos entidad por entidad o fila por fila, se define una sola solicitud para el servidor o la base de datos, lo cual genera cálculos considerablemente más rápido.

Solamente los servicios de entidades y las geodatabases corporativas son compatibles con expresiones de SQL. Para otros formatos, utilice expresiones de Python o Arcade.

Para obtener más información sobre las expresiones de VBScript, consulte Ejemplos de Calcular campo de VBScript.

  • PythonSe utilizará el tipo de expresión de Python.
  • ArcadeSe utilizará el tipo de expresión de Arcade.
  • SQLSe utilizará el tipo de expresión de SQL.
  • VBScriptSe utilizará el tipo de expresión VBScript.
String
Bloque de código
(Opcional)

Un bloque de código que se utilizará para expresiones complejas de Python o VBScript.

String
Tipo de campo
(Opcional)

Especifica el tipo de campo del nuevo campo. Este parámetro solo se utiliza si el nombre de campo no existe en la tabla de entrada.

Si el campo es de tipo texto, el campo tendrá una longitud de 512, a menos que la entrada sea un archivo shapefile o dBASE, en cuyo caso la longitud será de 254. Para ajustar la longitud, utilice la herramienta Alterar campo.

  • Corto (entero de 16 bits)El tipo de campo será corto. Los campos cortos admiten números enteros entre -32.768 y 32.767.
  • Largo (entero de 32 bits)El tipo de campo será largo. Los campos nuevos admiten número enteros entre -2.147.483.648 y 2.147.483.647.
  • Entero grande (entero de 64 bits)El tipo de campo será entero grande. Los campos de números enteros grandes admiten números enteros entre -(253) y 253.
  • Flotante (punto flotante de 32 bits)El tipo de campo será flotante. Los campos flotantes admiten números fraccionarios entre -3,4E38 y 1,2E38.
  • Doble (punto flotante de 64 bits)El tipo de campo será doble. Los campos dobles admiten números fraccionarios entre -2,2E308 y 1,8E308.
  • TextoEl tipo de campo será texto. Los campos de texto admiten una cadena de caracteres.
  • FechaEl tipo de campo será fecha. Los campos de fecha admiten fecha y hora.
  • Fecha (alta precisión)El tipo de campo será el de fecha de alta precisión. Los campos de fecha de alta precisión admiten valores de fecha y hora con tiempo en milisegundos.
  • Solo fechaEl tipo de campo será solo de fecha. Los campos de solo fecha admiten valores de fecha sin valores de hora.
  • Solo tiempoEl tipo de campo será solo de tiempo. Los campos de solo hora admiten valores de hora sin valor de fecha.
  • Desfase de marca de tiempoEl tipo de cambio será de desfase de marca de tiempo. Los campos de desplazamiento de fecha y hora admiten un valor de fecha, hora y desplazamiento con respecto a un valor UTC.
  • BLOB (datos binarios)El tipo de campo será BLOB. Los campos BLOB admiten datos almacenados como una secuencia larga de números binarios. Necesita un cargador o un visor personalizado, o una aplicación de terceros, para cargar elementos en un campo BLOB o para visualizar el contenido de un campo BLOB.
  • GUID (identificador único a nivel mundial)El tipo de campo será GUID. Los campos GUID almacenan cadenas de texto de estilo de registro que están compuestas por 36 caracteres encerrados entre paréntesis.
  • RásterEl tipo de campo será ráster. Los campos ráster pueden almacenar datos ráster dentro o junto con la geodatabase. Aunque se pueden almacenar todos los formatos de dataset ráster admitidos por el software de ArcGIS, se recomienda utilizar solamente imágenes pequeñas.
String
Imponer dominios
(Opcional)

Especifica si se impondrán reglas de dominio de campo.

  • Activado: se impondrán reglas de dominio de campo. Si no se puede actualizar un campo, el valor del campo no cambiará y los mensajes de la herramienta incluirán un mensaje de advertencia.
  • Desactivado: no se impondrán reglas de dominio de campo. Esta es la configuración predeterminada
Boolean

Salida derivada

EtiquetaExplicaciónTipo de datos
Tabla de entrada actualizada

La tabla actualizada.

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type}, {enforce_domains})
NombreExplicaciónTipo de datos
in_table

Tabla que contiene el campo que se actualizará con el cálculo nuevo.

Mosaic Layer; Raster Layer; Table View
field

Campo que se actualizará con el cálculo nuevo.

Si no existe ningún campo con el nombre especificado en la tabla de entrada, se agregará.

Field
expression

Expresión de cálculo simple que se utiliza para crear un valor que completará las filas seleccionadas.

SQL Expression
expression_type
(Opcional)

Especifica el tipo de expresión que se utilizará.

  • PYTHON3Se utilizará el tipo de expresión de Python.
  • ARCADESe utilizará el tipo de expresión de Arcade.
  • SQLSe utilizará el tipo de expresión de SQL.
  • VBSe utilizará el tipo de expresión VBScript.

Si la entrada es un servicio de entidad, el tipo de expresión predeterminado es SQL. Para cualquier otro tipo de entrada, el tipo de expresión predeterminado es PYTHON3.

Para obtener más información sobre las expresiones de Python, consulte Ejemplos de Calcular campo de Python.

Para obtener más información sobre las expresiones de Arcade, consulte la Guía de ArcGIS Arcade.

Para obtener más información sobre las expresiones de SQL, consulte Calcular valores de campo.

Las expresiones SQL permiten cálculos más rápidos en servicios de entidades y geodatabases corporativas. En lugar de realizar cálculos entidad por entidad o fila por fila, se define una sola solicitud para el servidor o la base de datos, lo cual genera cálculos considerablemente más rápido.

Solamente los servicios de entidades y las geodatabases corporativas son compatibles con expresiones de SQL. Para otros formatos, utilice expresiones de Python o Arcade.

Para obtener más información sobre las expresiones de VBScript, consulte Ejemplos de Calcular campo de VBScript.

String
code_block
(Opcional)

Un bloque de código que se utilizará para expresiones complejas de Python o VBScript.

String
field_type
(Opcional)

Especifica el tipo de campo del nuevo campo. Este parámetro solo se utiliza si el nombre de campo no existe en la tabla de entrada.

Si el campo es de tipo texto, el campo tendrá una longitud de 512, a menos que la entrada sea un archivo shapefile o dBASE, en cuyo caso la longitud será de 254. Para ajustar la longitud, utilice la herramienta Alterar campo.

  • SHORTEl tipo de campo será corto. Los campos cortos admiten números enteros entre -32.768 y 32.767.
  • LONGEl tipo de campo será largo. Los campos nuevos admiten número enteros entre -2.147.483.648 y 2.147.483.647.
  • BIGINTEGEREl tipo de campo será entero grande. Los campos de números enteros grandes admiten números enteros entre -(253) y 253.
  • FLOATEl tipo de campo será flotante. Los campos flotantes admiten números fraccionarios entre -3,4E38 y 1,2E38.
  • DOUBLEEl tipo de campo será doble. Los campos dobles admiten números fraccionarios entre -2,2E308 y 1,8E308.
  • TEXTEl tipo de campo será texto. Los campos de texto admiten una cadena de caracteres.
  • DATEEl tipo de campo será fecha. Los campos de fecha admiten fecha y hora.
  • DATEHIGHPRECISIONEl tipo de campo será el de fecha de alta precisión. Los campos de fecha de alta precisión admiten valores de fecha y hora con tiempo en milisegundos.
  • DATEONLYEl tipo de campo será solo de fecha. Los campos de solo fecha admiten valores de fecha sin valores de hora.
  • TIMEONLYEl tipo de campo será solo de tiempo. Los campos de solo hora admiten valores de hora sin valor de fecha.
  • TIMESTAMPOFFSETEl tipo de cambio será de desfase de marca de tiempo. Los campos de desplazamiento de fecha y hora admiten un valor de fecha, hora y desplazamiento con respecto a un valor UTC.
  • BLOBEl tipo de campo será BLOB. Los campos BLOB admiten datos almacenados como una secuencia larga de números binarios. Necesita un cargador o un visor personalizado, o una aplicación de terceros, para cargar elementos en un campo BLOB o para visualizar el contenido de un campo BLOB.
  • GUIDEl tipo de campo será GUID. Los campos GUID almacenan cadenas de texto de estilo de registro que están compuestas por 36 caracteres encerrados entre paréntesis.
  • RASTEREl tipo de campo será ráster. Los campos ráster pueden almacenar datos ráster dentro o junto con la geodatabase. Aunque se pueden almacenar todos los formatos de dataset ráster admitidos por el software de ArcGIS, se recomienda utilizar solamente imágenes pequeñas.
String
enforce_domains
(Opcional)

Especifica si se impondrán reglas de dominio de campo.

  • ENFORCE_DOMAINSSe impondrán reglas de dominio de campo.
  • NO_ENFORCE_DOMAINSNo se impondrán reglas de dominio de campo. Esta es la opción predeterminada.
Boolean

Salida derivada

NombreExplicaciónTipo de datos
out_table

La tabla actualizada.

Table View; Raster Layer; Mosaic Layer

Muestra de código

Ejemplo 1 de CalculateField (ventana de Python)

La siguiente secuencia de comandos de la ventana de Python muestra cómo utilizar la función CalculateField de modo inmediato.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.AddField("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.management.CalculateField("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON3")
Ejemplo 2 de CalculateField (script independiente)

Utilizar la función CalculateField para asignar valores de centroide a campos nuevos.

# Name: CalculateField_centroids.py

# Import system modules
import arcpy

# 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.management.AddField(inFeatures, fieldName1, "DOUBLE", 
                          fieldPrecision, fieldScale)
arcpy.management.AddField(inFeatures, fieldName2, "DOUBLE", 
                          fieldPrecision, fieldScale)
 
# Calculate centroid
arcpy.management.CalculateField(inFeatures, fieldName1, 
                                "!SHAPE.CENTROID.X!",
                                "PYTHON3")
arcpy.management.CalculateField(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
Ejemplo 3 de CalculateField (script independiente)

Utilizar la función CalculateField con un bloque de código para calcular valores basados en rangos.

# Name: CalculateField_ranges.py

# 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"""
 
# Run AddField
arcpy.management.AddField(inTable, fieldName, "SHORT")
 
# Run CalculateField 
arcpy.management.CalculateField(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
Ejemplo 4 de CalculateField (script independiente)

Utilizar la función CalculateField para asignar valores aleatorios a un campo nuevo.

# Name: CalculateField_Random.py

# Import system modules
import arcpy
import random
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "random.randint(0, 10)"
code_block = "import random"
 
# Run AddField
arcpy.management.AddField(inFeatures, fieldName, "LONG")
 
# Run CalculateField 
arcpy.management.CalculateField(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
Ejemplo 5 de CalculateField (ventana de Python)

La siguiente secuencia de comandos de la ventana de Python muestra cómo utilizar la función CalculateField con Arcade de modo inmediato.

import arcpy
arcpy.env.workspace = "C:/data/fgdb.gdb"
arcpy.management.CalculateField("data", "new_value", "$feature.value1 + $feature.value2", "ARCADE")
Ejemplo 6 de CalculateField (ventana de Python)

La siguiente secuencia de comandos de la ventana de Python muestra cómo utilizar la función CalculateField con SQL de modo inmediato.

import arcpy
feature_service = "<a feature service url>"
arcpy.management.CalculateField("data", "NEW_VALUE", "SAMPLE * (BASELINE - 40)", "SQL")

Entornos

Casos especiales

Transferir descripciones de dominio de campo

Cuando este entorno se activa, todos los campos que tienen un dominio asociado usarán la descripción del dominio en vez del valor del campo. Los valores de campos que no tienen un dominio no se verán afectados.

Temas relacionados