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

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

    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.

  • 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. Para aplicar varios cálculos, utilice la herramienta Calcular campos.

  • Los valores de campo existentes se sobrescriben. Realice una copia de la tabla de entrada si desea conservar los valores originales.

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

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

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

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

  • Heredado:

    arcgis.rand() ya no se admite desde ArcGIS Pro 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.

  • El parámetro Bloque de código permite crear expresiones complejas. Puede introducir el bloque de código directamente en el cuadro de diálogo o como una cadena de caracteres continua en un 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.

  • El módulo y el formato de math de Python están disponibles para el uso en el parámetro Bloque de código. 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.

  • Se pueden crear expresiones en Python utilizando las propiedades del objeto Geometry como 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.

    • Palabras clave de unidad de medida de área:
      • ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
    • Palabras clave de unidad de medida lineal:
      • CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
  • Se pueden usar expresiones de Python para calcular la longitud o el área geodésica de una entidad mediante el uso de las propiedades geodesicArea o geodesicLength combinadas con unidades de medida lineales o de área (por ejemplo, !shape.geodesicArea@hectares! o !shape.geodesicLength@miles!).

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

  • 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 al mapa. Después puede realizar cálculos en estos datos por separado. Estos cambios se reflejarán en las columnas que se unieron.

  • Las expresiones de Python que intentan concatenar los campos de cadenas de caracteres que incluyan un valor nulo, o dividir por cero, devolverán un valor nulo para el valor de ese campo.

  • Tenga en cuenta que esta herramienta respeta la configuración de entorno Extensión de salida. Solo se calcularán los valores de campo de las entidades que estén dentro de la extensión. La configuración de entorno no tiene ningún efecto en datos no espaciales como las tablas

  • Calcular campo respeta el entorno 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.

  • Se implementaron expresiones SQL para permitir cálculos más rápidos en servicios de entidades. En lugar de realizar cálculos entidad por entidad o fila por fila, se define una sola solicitud para el servicio de entidades, lo cual genera cálculos considerablemente más rápido.

    Solo los servicios de entidades admiten expresiones SQL. Para otros formatos, utilice expresiones de Python o Arcade.

Sintaxis

CalculateField(in_table, field, expression, {expression_type}, {code_block}, {field_type})
ParámetroExplicació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á.

Heredado:

PYTHON y PYTHON_9.3 aún se admiten para la compatibilidad con versiones anteriores, pero no se muestran como opciones. Los scripts de Python que utilizan estas palabras clave seguirán funcionando.

Python 3 (PYTHON3 en Python) devuelve los valores en campos de fecha como objetos datetime de Python. PYTHON y PYTHON_9.3 devuelven los valores en campos de fecha como cadenas de caracteres.

  • PYTHON3Tipo de expresión de Python. Esta es la opción predeterminada.
  • ARCADETipo de expresión de Arcade.
  • SQLExpresión de SQL.

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

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.

Se implementaron expresiones SQL para permitir cálculos más rápidos en servicios de entidades. En lugar de realizar cálculos entidad por entidad o fila por fila, se define una sola solicitud para el servicio de entidades, lo cual genera cálculos considerablemente más rápido.

Solo los servicios de entidades admiten expresiones SQL. Para otros formatos, utilice expresiones de Python o Arcade.

String
code_block
(Opcional)

Un bloque de código que se introducirá para expresiones complejas.

String
field_type
(Opcional)

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 texto, el nuevo campo tendrá una longitud de 512. En el caso de los shapefiles y los archivos de dBASE, el campo tendrá una longitud de 254. La longitud del nuevo campo se puede ajustar con la herramienta Modificar campo.

  • TEXTCualquier cadena de caracteres.
  • FLOAT Números fraccionarios entre -3,4E38 y 1,2E38.
  • DOUBLE Números fraccionarios entre -2,2E308 y 1,8E308.
  • SHORT Números enteros entre -32.768 y 32.767.
  • LONG Números enteros entre -2.147.483.648 y 2.147.483.647.
  • DATEFecha y hora.
  • BLOBSecuencia larga de números binarios.
  • RASTERImágenes ráster. 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.
  • GUIDIdentificador único a nivel mundial.
String

Salida derivada

NombreExplicaciónTipo de datos
out_table

La tabla actualizada.

Vista de tabla; Capa ráster; Capa de mosaico

Muestra de código

Ejemplo 1 de CalculateField (ventana de Python)

El siguiente script de la ventana de Python demuestra cómo utilizar la función CalculateField en el modo inmediato.

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

Utilice CalculateFieldpara asignar valores del 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.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!",
                                "PYTHON3")
arcpy.CalculateField_management(inFeatures, fieldName2, 
                                "!SHAPE.CENTROID.Y!",
                                "PYTHON3")
Ejemplo 3 de CalculateField (script independiente)

Utilice CalculateField con un bloque de código para calcular los 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"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON3", 
                                codeblock)
Ejemplo 4 de CalculateField (script independiente)

Utilice CalculateField para asignar valores aleatorios al 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"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON3", 
                                code_block)
Ejemplo 5 de CalculateField (ventana de Python)

El siguiente script de la ventana de Python demuestra cómo utilizar la función CalculateField con ARCADE en el modo inmediato.

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

El siguiente script de la ventana de Python demuestra cómo utilizar la función CalculateField con SQL en el modo inmediato.

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

Entornos

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.

Información de licenciamiento

  • Basic: Sí
  • Standard: Sí
  • Advanced: Sí

Temas relacionados