1 votos

Reemplazar NULLs dentro de un bucle ListFields

Tengo algunas dificultades para cambiar los valores "NULL" a cero en todos los campos "DOUBLE" de la clase feature. He tratado de hacer una herramienta script con el siguiente código de Python en ArcGIS 10.5 pero no funcionó. No hay mensajes de error, pero nada cambia en la tabla.

# Import system modules
import arcpy

# Set the parameters
InputFeatureClass = arcpy.GetParameterAsText(0)

fieldList = arcpy.ListFields(InputFeatureClass, "DOUBLE") 
for field in fieldList:
    expression = "replaceNull(field)"
    codeblock = """def replaceNull(x):
      if x is None:
        return 0
      else:
        return x"""
    arcpy.CalculateField_management(InputFeatureClass, field, expression, "PYTHON", codeblock)

¿Qué pasa? He buscado en muchos temas aquí, pero no pude encontrar la solución.

3voto

Anton8000 Puntos 165

El segundo parámetro de ListField es un comodín, el tercero es el tipo de campo, por lo que la lista probablemente esté vacía. Si proporcionas el nombre del parámetro no tienes que preocuparte por la posición que debe ocupar y el código será más fácil de leer.

ListFields es un listado objetos de campo no los nombres de los campos. El nombre es una de las propiedades de los objetos de campo y puede listarlos así [f.name for f in arcpy.ListFields(fc)]

También es más fácil utilizar el da.UpdateCursor en lugar de Field Calculator:

fieldlist = [f.name for f in arcpy.ListFields(dataset=InputFeatureClass, field_type='Double')]

with arcpy.da.UpdateCursor(InputFeatureClass,fieldlist) as cursor:
    for row in cursor:
        row = tuple([0 if v is None else v for v in row])
        cursor.updateRow(row)

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