Instrução

Como classificar valores numéricos armazenados em um campo de texto

Last Published: April 4, 2025

Descrição

No ArcGIS Pro, podemos classificar nossos dados com base em nossos campos. Existe a opção de classificar cada campo em ordem crescente ou decrescente e podemos combinar campos. Mais informações sobre como classificar registros em uma tabela podem ser encontradas aqui: Classificar registros em uma tabela.

Quando nossos campos são simples, como valores numéricos em um campo de tipo numérico ou letras em um campo de texto, a classificação de tabelas é simples. Os números em um tipo de campo longo podem ser facilmente classificados em ordem crescente e as palavras em um campo de texto podem ser classificadas em ordem alfabética.

Classificação numérica

campo numérico em ordem crescente

Classificação alfabética

campo de texto classificado em ordem alfabética

No entanto, classificar números armazenados em campos de texto produz resultados inesperados. Em vez de 1, seguido por 2 e 3, etc., obtemos 1 seguido por 10, seguido por 100, conforme mostrado na próxima imagem.

000031875_NumbersText.jpg

Solução ou Solução Provisória

Para entender melhor esse comportamento, primeiro precisamos entender os valores Unicode e ASCII e a classificação do Python. Consulte a referência do ArcGIS Pro: uma apresentação rápida pelo Unicode,

Unicode é "um sistema de codificação de caracteres usado por computadores para o armazenamento e intercâmbio de dados textuais". Cada código corresponde a um caractere único. Os valores Unicode para os números de 0 a 9 são U+0030 a U+0039, enquanto os códigos ASCII são de 48 a 57. É importante notar que não há valor Unicode ou ASCII para o número 10, apenas combinamos os códigos para 1 e 0.  
Quando classificamos nossos dados em ordem crescente, o ArcGIS Pro lê os valores da esquerda para a direita em nosso campo de classificação escolhido para cada linha. Os valores Unicode do primeiro caractere são comparados e listados em ordem crescente. Esse processo continua para todos os caracteres em todas as linhas. Os valores codificados são todos classificados em ordem crescente, classificando os campos como resultado.

Quando pensamos em nossos exemplos de classificação, o número 1 (U+0031) vem primeiro, seguido pelos números 10 (U+0031 U+0030), 100 (U+0031 U+0030 U+0030) e assim por diante. Outro exemplo desse tipo de classificação está em um dicionário, todas as palavras que começam com A são listadas antes daquelas que começam com B, e aardvark é antes de abate. Dessa forma, quando classificamos nossos valores em ordem crescente, nossos números vão de 1 a 10009, 1001 a 10019, 1002 a 10029 e assim por diante. Um problema óbvio com isso é que 1002 vem depois de 10019 porque o algoritmo olha para os caracteres 100* primeiro e depois compara 1 com 2, decide que 1 vem antes de 2 e depois compara todas as strings com 1001*, deixando 1002 para mais tarde na sequência. Isso explica por que 10 vem antes de 2 (U + 0032), já que a classificação classificou '1 *' para vir antes de 2.

Idealmente, se quisermos classificar campos que tenham um componente numérico, usaremos um tipo de campo numérico como Long, onde os números são tratados como inteiros e não como valores Unicode. Se quisermos classificar nossos dados com base em um campo de texto que contém uma mistura de caracteres alfanuméricos, nossa melhor opção é incluir o comprimento da string em nossa comparação. Isso significa que todas as linhas com um único caractere são classificadas primeiro, depois todos os caracteres duplos e assim por diante. Desta forma, o número 2 virá antes do 10. Para fazer isso no ArcGIS Pro, precisamos incluir um campo de comprimento de string em nossa tabela para calcular o comprimento dos componentes numéricos. Idealmente, teríamos um caractere definidor que podemos usar para separar os valores, como barra (/).
Usando o bloco de código na janela calcular campo, podemos usar uma fórmula como:

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

Podemos então aplicar esse novo campo de comprimento como nossa classificação. Se nosso campo de texto for mais complicado, por exemplo, construindo códigos com diferentes conjuntos de caracteres, ou seja, alguns usam um hífen enquanto outros usam uma barra, podemos criar vários campos de comprimento e combiná-los como campos de classificação primários e secundários usando a funcionalidade de classificação personalizada. Primeiro, todas as nossas linhas serão classificadas pelo comprimento A, depois pelo comprimento B.

ID do Artigo: 000031875

Obtenha suporte com IA

Resolva seu problema rapidamente com o chatbot de IA de suporte da Esri.

Comece a conversar agora

Informações Relacionadas

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Comece a conversar agora

Ir para as opções de download