La comparación de los objetos datetime - Python

0

Pregunta

Tengo un archivo de datos que se parece a la siguiente:

Date          item purchased
01-12-2018      Car
02-12-2018      Truck
03-12-2018      Car
04-12-2018      Bike

Como parte de los datos de proceso de limpieza, necesito comprobar que los datos están en orden cronológico. Así que tengo que comprobar que la fecha en una fila después de la fecha en la fila anterior. Si no, tengo que eliminar esa fila. Estoy enseñado a no utilizar los pandas de la biblioteca.

Hasta ahora, he hecho los pasos siguientes hasta el momento:



#If the file name is - 'Input_file'

from openpyxl import load_workbook
from datetime import datetime

#Reading the file 
wb = load_workbook(Input_file)
sheet = wb.active

#Reading the Date column in the file
Date_column = sheet['A']


#Reading each row and the date in each row to compare it with the previous row date
for x in range(len(Date_column)):
    Datenow = Date_column[x].value

    Datebef= Date_column[x-1].value
    
    Check = Datenow > Datebef

    print(Check)

El error se obtiene cuando trato de comparar los objetos datetime es :


TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'

El problema es cuando puedo comprobar el tipo de la columna de la fecha, que viene a ser datetime.datetime, pero tan pronto como tratar de comparar el datetime.objetos datetime, me dice que uno es de cadena y uno es de tipo datetime.objeto datetime. La confusión es tanto si los valores se leen de la misma columna, Cómo se está saliendo como una cadena y uno es de tipo datetime.datetime.

Cómo puedo asegurarme de que los valores se mantengan como datetime.datetime y puedo comparar.

Gracias

datetime openpyxl python
2021-11-24 00:38:46
1

Mejor respuesta

0

Usted puede comprobar el tipo de datos de la celda antes de comparar. También, usted necesita pensar cuidadosamente acerca de las comparaciones y el orden de la eliminación de las filas, porque usted no puede hacer esto mientras que usted vaya. En su lugar usted necesita para crear una lista de las filas a eliminar y borrar en orden inverso.

Algo como esto debería funcionar.

import datetime

previous_date = datetime.date(2017, 12, 31) # adjust as necessary
rows_to_delete = []

for row in ws.iter_rows(min_col=1, max_col=1, min_row=2):
    cell = row[0]
    if not isinstance(cell.value, datetime.date):
        continue
    if cell.value < previous_date:
        rows_to_delete.append(cell.row)
    previous_date = cell.value

for row in reversed(rows_to_delete):
   ws.delete_rows(row)
2021-11-25 10:38:07

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................