Más

ArcGIS calcula la diferencia entre filas en el mismo campo que es el formato de fecha y hora

ArcGIS calcula la diferencia entre filas en el mismo campo que es el formato de fecha y hora


Estoy buscando ayuda para modificar el código de Python que se analiza aquí: Tabla de atributos Restar valor del valor anterior

Tengo problemas para averiguar cómo ajustarlo para un campo de fecha en el que quiero restar un tiempo por el tiempo anterior para obtener espacios. Esto es lo que tengo hasta ahora y el error recibido:

importar arcpy de arcpy importar da vertices = "CBR05_T2_10_1_2014_WLanduse_1" gap1 = 0 con arcpy.da.UpdateCursor (vértices, ["INDEX_", "Time", "GapDiff"]) como cursor: para la fila en el cursor: gap2 = fila [1 ] fila [2] = fecha y hora (intervalo2 - intervalo1) intervalo1 = intervalo2 cursor.updateRow (fila)

Runtime error Traceback (última llamada más reciente): Archivo "", línea 8, en TypeError: tipos de operandos no admitidos para -: 'datetime.datetime' e 'int'


Estás intentando restar un número entero (definido engap1 = 0) de un objeto de fecha y hora en la siguiente línea:fila [2] = fecha y hora (intervalo2 - intervalo1). Deberá omitir la primera fila y asignar su fecha y hora a una variable para la siguiente fila. Dado que la primera fila no tiene fecha y hora en curso, no se actualizará un valor.

Esto funcionó para mí:

importar arcpy de arcpy import da vertices = "CBR05_T2_10_1_2014_WLanduse_1" # establecer la variable firstRow en true firstRow = True con arcpy.da.UpdateCursor (vértices, ["INDEX_", "Time", "GapDiff"]) como cursor: para la fila en el cursor : gap2 = fila [1] # comprobar si es la primera fila si firstRow == True: gap1 = gap2 # establecer firstRow en falso firstRow = False continuar fila [2] = str (gap2 - gap1) gap1 = gap2 cursor.updateRow ( hilera)

Tenga en cuenta que el campo "GapDiff" debe ser un campo de cadena. un campo de fecha y hora no admite valores de hora resultantes de una sustracción (como1 día).


Tenía curiosidad por saber si había una forma más limpia de usar los cursores sin tener que usar siempre elprimera filacomprobar, y resulta que los siguientes trabajos. ¡Hurra por los generadores *!

con arcpy.da.SearchCursor (fc, "OID @") como cursor: p = cursor.next () [0] #previous for row in cursor: c = row [0] # current print (c - p) #function va aquí para actualizar los valores p = fila [0] # se convierte en la siguiente iteración anterior

Sin saber cómo se ven sus datos o cómo desea que losGapDiffcampo poblado (cadena, int, fecha, etc.), necesitará crear una función.

*Ya quecursores un generador,siguiente (cursor)también funciona, al igual que llamar al.Reiniciar()método en él para comenzar desde el principio.