Más

Restar columnas (que incluyen valores nulos) en ArcMap Field Calculator

Restar columnas (que incluyen valores nulos) en ArcMap Field Calculator


Estoy tratando desesperadamente de ejecutar un comando muy simple en el que resto una columna con otras. Sin embargo, el problema es que algunas filas tienen valores NULL, por lo que el resultado de la resta también es NULL. Intenté usar el script que se encuentra en este foro, pero supongo que no lo escribí correctamente, ya que no funciona como debería.

def stack (item1, item2): itemList = [item1, item2] myList = [item for item in itemList if (item! = None)] return (item1-item2)

¿Existe una función estándar para restar dos o varios campos en ArcPython?


no existe el operador "suma" para la diferencia (que no es permutable), por lo que debe probar la validez de cada elemento para decidir cómo ejecutar la resta.

def stack (item1, item2): if item1! = None y item2! = None: return item1-item2 elif item1! = None: return item1 elif item2! = None: return -item2 #added minus if item2> item1 and result should ser negativo else: return None

alternativamente, puede calcular la diferencia entre el primer elemento válido y la suma de los siguientes elementos (solo necesita verificar que haya al menos un elemento)

def stack (item1, item2, item3, item4): itemList = [item1, item2, item3, item4] myList = [item for item in itemList if (item! = None)] if len (myList)> 0: return myList [ 0] -sum (myList [1:]) #diferencia entre el primer elemento y el resto de la lista else: return None

Como comentario, debe elegir una regla cuando no tenga suficientes campos válidos. Los valores nulos no son compatibles con todas las bases de datos, pero en mi opinión es la mejor solución. También tenga en cuenta que puede cambiar el número mínimo de campos válidos con len (myList)>algún_valor condición

EDITAR: si sus valores "nulos" son de hecho "ceros", también puede reemplazar los valores nulos con cero en su lista. Eso hace que el código sea aún más corto.

def stack (item1, item2, item3, item4): myList = [item if (item! = None) else 0 for item in [item1, item2, item3, item4]] return myList [0] -sum (myList [1: ])

Ver el vídeo: Operaciones con Field Calculator en ArcGIS