2 votos

¿Buscar y reemplazar con la sentencia if then else en la calculadora de campos de ArcGIS Pro?

Tengo una columna de cadenas que siempre empiezan con los dos primeros caracteres que son números, como 39 o 07, etc. En una nueva columna quiero procesar la columna original de forma que sustituya cualquiera de esos dos primeros números que no sean 39 por un 39, pero asegurándome de que los caracteres de cadena restantes siguen ahí. Es decir, buscar y reemplazar pero indexando los dos primeros caracteres. Quiero usar el comando .replace() pero no estoy seguro de cómo enlazar el índice, el comando replace y una sentencia If Than Else para que funcione.

En la calculadora de campo sería así:

replace(!Permit_num!)

bloque de código:

import re
def replace(val):
    if (val[0:1] == "07"):
        return re.sub ('07','39'+val[2:], val)
    elif (val[0:1] == "10"):
        return re.sub ('10','39'+val[2:], val)
    elif (val[0:1] == "11"):
        return re.sub ('11','39'+val[2:], val)
    elif (val[0:1] == "19"):
        return re.sub ('19','39'+val[2:], val)
    elif (val[0:1] == "24"):
        return re.sub ('24','39'+val[2:], val)
    elif (val[0:1] == "27"):
        return re.sub ('27','39'+val[2:], val)
    elif (val[0:1] == "34"):
        return re.sub ('34','39'+val[2:], val)
    elif (val[0:1] == "35"):
        return re.sub ('35','39'+val[2:], val)
    elif (val[0:1] == "39"):
        return re.sub ('39','39'+val[2:], val)
    elif (val[0:1] == "50"):
        return re.sub ('50','39'+val[2:], val)
    elif (val[0:1] == "54"):
        return re.sub ('54','39'+val[2:], val)
    elif (val[0:1] == "56"):
        return re.sub ('56','39'+val[2:], val)
    elif (val[0:1] == "99"):
        return re.sub ('99','39'+val[2:], val)

He intentado lo anterior, pero no funciona, obtener un error 99999 y dice que mi campo que estoy calculando en no es nullable. El nuevo campo es también una cadena.

1voto

Jim Puntos 31

Puede utilizar un comprensión de la lista para indexar y sustituir los primeros caracteres de cada elemento de una lista. Por ejemplo:

test = ["3901","1420","2270","3985"]

def replace(val):
    new = ["39" + i[2:] if i[:2] != "39" else i for i in test]     
    print (new)

replace(test)

1voto

thetwitt Puntos 13

Por fin he descubierto el problema. Era la posición de mi índice. Así que este tipo de código también funciona.

permit_fix =

replace(!permit_num!)

Bloque de códigos

import re

def replace(val):

    if (val[0:2] == "07"):

        return re.sub ('07','39', val)

    elif (val[0:2] == "10"):

        return re.sub ('10','39', val)

    elif (val[0:2] == "11"):

        return re.sub ('11','39', val)

    elif (val[0:2] == "19"):

        return re.sub ('19','39', val)

    elif (val[0:2] == "24"):

        return re.sub ('24','39', val)

    elif (val[0:2] == "27"):

        return re.sub ('27','39', val)

    elif (val[0:2] == "34"):

        return re.sub ('34','39', val)

    elif (val[0:2] == "35"):

        return re.sub ('35','39', val)

    elif (val[0:2] == "39"):

        return re.sub ('39','39', val)

    elif (val[0:2] == "50"):

        return re.sub ('50','39', val)

    elif (val[0:2] == "54"):

        return re.sub ('54','39', val)

    elif (val[0:2] == "56"):

        return re.sub ('56','39', val)

    elif (val[0:2] == "99"):

        return re.sub ('99','39', val)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X