Tengo varias columnas en varias tablas dentro de un FGDB donde necesito extraer los valores únicos para cada columna.
Por ejemplo: los valores pueden ser [1,2,2,2,3,4], y estoy tratando de devolver [1,2,3,4]
Podría hacer este trabajo de muchas otras maneras en ARCGIS, pero estoy tratando de extenderme.
He encontrado una pieza de python en la web que creo que hará el trabajo, pero estoy luchando para que se ejecute (sigo obteniendo un error de sintaxis no válido mientras sigo obteniendo el error de sintaxis en la línea 3). Un error de usuario realmente simple.
Fragmento de código a continuación
import arcpy
def unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
with arcpy.da.SearchCursor(table, [field]) as cursor:
return sorted({row[0] for row in cursor})
Este es el mensaje de error que recibo del texto sublime:
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 3
def unique_values(r'N:\GISProjects\Steve_Eastwood_Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
^
SyntaxError: invalid syntax
[Finished in 0.1s with exit code 1]
Actualizaciones de la pregunta original
Ahora he actualizado mi código con la respuesta proporcionada a continuación, pero recibo un error secundario.
Nuevo fragmento de código:
import arcpy
def unique_values(table , field):
with arcpy.da.SearchCursor(table, [field]) as cursor:
return sorted({row[0] for row in cursor})
myValues = unique_values(r'N:\\GISProjects\\Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')
print (myValues)
Recibo un nuevo mensaje de error relacionado con un error de tiempo de ejecución
Traceback (most recent call last):
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 7, in <module>
myValues = unique_values(r'N:\\GISProjects\\Steve_Eastwood_Landuse \Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 4, in unique_values
with arcpy.da.SearchCursor(table, [field]) as cursor:
RuntimeError: cannot open 'N:\\GISProjects\\Steve_Eastwood_Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge'
[Terminado en 8.0s con código de salida 1]
Asumo por la lectura que he hecho que esto se relaciona con la configuración del espacio de trabajo env.
fuente
env.workspace
lo que no creo. Intenta despegarr
antes del camino o cambiar el\` to
`en el camino (y deja elr
allí). ¿Existe esa geodatabase?[1,2,2,2,3,4]
, ¿está tratando de devolver[1,2,3,4]
? Actualice la publicación para incluir esta información.Respuestas:
Ya lo tiene, solo necesita especificar el nombre de sus parámetros
table
yfield
en la definición de su función, y luego pasar esos valores cuando llame a la función. También observe su sangría, ya que es vital para Python.Básicamente, esto significa que cuando llama a la función
unique_values()
pasará valores a dos parámetros, uno llamadotable
, el otro llamadofield
. Estos se utilizan en su función. Cuando llamas a la función, en la líneaEstá pasando los valores a estos parámetros.
Esto es lo mismo que declarar sus parámetros por separado y pasarlos directamente al cursor:
fuente
set(['a', 'b', 'a', 'b'])
, devolverá valores únicos{'a', 'b'}
. El usosorted()
solo los devuelve en orden ordenado ya que un conjunto simple no está ordenado.Aconsejaría usar la función incorporada de Python
set()
junto con aSearchCursor
como una expresión generadora para encontrar los valores únicos. Este enfoque le resultará extremadamente eficiente con conjuntos de datos grandes o pequeños:fuente
El siguiente enfoque fue publicado en https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ Está utilizando arcpy y numpy y tiene una huella de memoria menor que la Enfoque del cursor de búsqueda.
fuente
Sé que es una vieja pregunta, pero dejaré esto aquí para cualquiera que se encuentre con esto buscando ayuda. Usar
arcpy.Frequency_analysis()
rápidamente coloca todos los valores únicos de un campo en una nueva tabla, que luego puede usar para las operaciones del cursor. Un solo comando para hacer lo que hacen todas estas otras soluciones y más rápido y más fácil. Como beneficio adicional, también obtienes un recuento de cuántas veces aparece cada valor.fuente