CÓMO

Ordenar valores numéricos almacenados en un campo de texto

Last Published: April 4, 2025

Descripción

En ArcGIS Pro, podemos ordenar nuestros datos en función de nuestros campos. Existe la opción de ordenar cada campo en orden ascendente o descendente y se pueden combinar campos. Encontrará más información sobre cómo ordenar registros en una tabla aquí: Ordenar registros en una tabla.

Cuando los campos son simples, como valores numéricos en un campo de tipo numérico o letras en un campo de texto, la ordenación de tablas es sencilla. Los números en un tipo de campo Largo se pueden ordenar fácilmente en orden ascendente y las palabras en un campo de Texto se pueden ordenar en orden alfabético.

Ordenación numérica

Campo numérico en orden ascendente

Ordenación alfabética

Campo de texto ordenado alfabéticamente

Sin embargo, ordenar números almacenados en campos de texto produce resultados inesperados. En lugar de 1, seguido de 2 y 3, etc., se obtiene 1 seguido de 10, seguido de 100, como se muestra en la siguiente imagen.

000031875_NumbersText.jpg

Solución o solución alternativa

Para comprender mejor este comportamiento, primero debemos comprender los valores Unicode y ASCII y la ordenación de Python. Consulte la referencia de ArcGIS Pro: Un recorrido rápido por Unicode.

Unicode es "un sistema de codificación de caracteres utilizado por los equipos informáticos para el almacenamiento e intercambio de datos en formato de texto". Cada código corresponde a un carácter único. Los valores Unicode para los números del 0 al 9 son de U+0030 a U+0039, mientras que los códigos ASCII son del 48 al 57. Es importante tener en cuenta que no hay un valor Unicode o ASCII para el número 10, sino que, simplemente, se combinan los códigos para 1 y 0.
Cuando ordenamos nuestros datos en orden ascendente, ArcGIS Pro lee los valores de izquierda a derecha en el campo de ordenación elegido para cada fila. Los valores Unicode del primer carácter se comparan y se enumeran en orden ascendente. Este proceso continúa para todos los caracteres de todas las filas. Todos los valores codificados se ordenan en orden ascendente, con lo que se ordenan los campos.

Cuando pensamos en nuestros ejemplos de ordenación, el número 1 (U+0031) viene primero, seguido de los números 10 (U+0031 U+0030), 100 (U+0031 U+0030 U+0030), y así sucesivamente. Otro ejemplo de este tipo de ordenación es en un diccionario: todas las palabras que comienzan por A se enumeran antes que las que comienzan por B, y aardvark va antes que abate. De esta manera, cuando ordenamos nuestros valores en orden ascendente, nuestros números van del 1 al 10009, del 1001 al 10019, del 1002 al 10029, y así sucesivamente. Un problema evidente con esto es que 1002 viene después de 10019 porque el algoritmo mira primero los caracteres 100* y luego compara 1 con 2, decide que 1 viene antes que 2 y luego compara todas las cadenas con 1001*, de modo que deja 1002 para más adelante en la secuencia. Esto explica por qué 10 viene antes que 2 (U+0032), ya que la ordenación ha ordenado "1*" para que venga antes que 2.

Idealmente, si queremos ordenar campos que tienen un componente numérico, usaremos un tipo de campo numérico como Largo, donde los números se tratan como números enteros y no como valores Unicode. Si queremos ordenar nuestros datos en función de un campo de texto que contiene una combinación de caracteres alfanuméricos, nuestra mejor opción es incluir la longitud de la cadena en nuestra comparación. Esto significa que todas las filas con un solo carácter se ordenan primero, luego todos los caracteres dobles, y así sucesivamente. De esta forma, el número 2 vendrá antes que el 10. Para hacer esto en ArcGIS Pro, necesitamos incluir un campo de longitud de cadena de caracteres en nuestra tabla para calcular la longitud de los componentes numéricos. Lo ideal sería disponer de un carácter definitorio que pudiéramos utilizar para separar los valores, como la barra diagonal (/).
Utilizando el bloque de código en la ventana de cálculo de campo, podemos usar una fórmula como:

import re
def calculate_sort_value(s): 
       if '/' in s: 
                     result = s.split("/", 1)[1] 
                     return len(result) 
 
       else: 
               return None

Luego podemos aplicar este nuevo campo de longitud como nuestra ordenación. Si nuestro campo de texto es más complejo, por ejemplo, al crear códigos con diferentes conjuntos de caracteres, es decir, algunos usan un guion mientras que otros usan una marca de barra, podemos crear varios campos de longitud y combinarlos como campos de ordenación principales y secundarios utilizando la funcionalidad de ordenación personalizada. Primero, todas nuestras filas se ordenarán por la longitud A y, luego, por la longitud B.

Id. de artículo: 000031875

Obtenga soporte con IA

Resuelva su problema rápidamente con el chatbot de inteligencia artificial de soporte de Esri.

Empieza a chatear ahora

Información relacionada

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Empieza a chatear ahora

Ir a opciones de descarga