8 votos

el cálculo de un campo en el que los valores nulos pueden estar presentes

Quiero calcular un campo (entero corto) el uso de otros campos (entero corto) presentes en la mesa. En algunos casos, estos campos pueden tener valores null para uno o más de los campos. Por ejemplo, el nuevo nombre de campo es 'total' y el total se basa en la adición de campo1 + campo2 + campo3. Algunos registros (filas) tienen valores para campo1, campo2 y campo3, pero algunas filas sólo tienen valores para campo1 y campo2, a continuación, field3 es nulo. Necesito ir y reemplazar todos los valores nulos con un valor numérico? O, ¿hay alguna solución dentro de la VB o secuencia de comandos de python?

Estoy usando ArcMap 10.1

Gracias

-al

Yo he utilizado una de python ejemplo desde abajo y han sido incapaces de llegar a trabajar. Este es el código que estoy usando:

#calculate new field 'summed' in feature class 'test'
inFeatures='test'
fieldName01='summed'
exSummed = "stack(!field01!+!field02!+!field03!)"
codeBlock = "def stack(*args):
    return sum(filter(None, args))"

arcpy.CalculateField_management(inFeatures, fieldName01, exSummed, "PYTHON", codeBlock)

donde 'suman' es el campo de la (corta) me gustaría rellenar y field01, field02, field03 son todos los enteros cortos que pueden o no pueden tener NULL presente.

Recibo un mensaje de error cuando ejecuto este...

enter image description here

Estoy seguro de que es algo sencillo que estoy haciendo mal. Gracias-al

12voto

Robert Höglund Puntos 5572

Un buen Python forma de abordar esto es utilizar el filtro de la función, que tiene dos entradas: el valor que desea excluir, y el objeto de entrada (cualquier interable). Después de eso, sólo suma el resultado:

def stack(*args):
    return sum(filter(None, args))

5voto

Amy Puntos 46

@ustroetz respuesta es casi correcta. Sin embargo, no necesariamente le da los resultados correctos.

Al mutar la lista, mientras que iterar sobre él, usted puede omitir algunos valores.

Por ejemplo, si la lista se define como tal:

mylist = [None, 3,4,5,6,7, None, None, 4,65,23,6, None]

y utiliza este código:

for item in myList:
  if item is None:
   myList.remove(item)

Luego de su resultantes mylist será:

[3, 4, 5, 6, 7, 4, 65, 23, 6, None]

Por favor, ver este post y este post (le pregunté a la segunda pregunta, cuando he intentado replicar el código de arriba) en Stackoverflow que cubren temas similares.

@Lattyware la respuesta se describe el uso de la lista de comprensión para obtener la respuesta correcta.

Así que, si queremos modificar @ustroetz la respuesta, usted debe poner la siguiente como su pre-lógica de código:

def stack(*args):
  myList = list(args)
  myList [item for item in mylist if item is not None]
  return sum(myList)

0voto

El siguiente python calculadora de campo código debe hacer el trabajo:

total =

stack( !field1!, !field2!, !field3!)

Pre-Lógica De Código De Secuencia De Comandos:

def stack(*args):
 myList = list(args)
 for item in myList:
  if item is None:
   myList.remove(item)
 return sum(myList)

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