es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparando objetos datetime – Python

Tengo un archivo de datos que se ve así:

Fecha artículo comprado
01-12-2018 Coche
02-12-2018 Camión
03-12-2018 Coche
04-12-2018 Bicicleta

Como parte del proceso de limpieza de datos, necesito comprobar que los datos estén en orden cronológico. Por lo tanto, necesito comprobar que la fecha en una fila sea posterior a la fecha en la fila anterior. Si no es así, necesito eliminar esa fila. Se me indica que no use la biblioteca de pandas.

Hasta ahora, he realizado los siguientes pasos:

Si el nombre del archivo es - 'Input_file' 

from openpyxl import load_workbook
from datetime import datetime

Leyendo el archivo

wb = load_workbook(Input_file)
sheet = wb.active

Leyendo la columna de fecha en el archivo

Date_column = sheet['A']

Leyendo cada fila y la fecha en cada fila para compararla con la fecha de la fila anterior

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 que obtengo cuando intento comparar los objetos de fecha y hora es:

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

El problema es cuando compruebo el tipo de la columna de fecha, resulta ser datetime.datetime pero en cuanto intento comparar ambos objetos datetime.datetime, me indica que uno es de tipo cadena y el otro es un objeto datetime.datetime. La confusión es que si ambos valores se leen de la misma columna, ¿cómo uno es cadena y otro es objeto datetime.datetime?

¿Cómo puedo asegurarme de que los valores se mantengan como datetime.datetime y que pueda compararlos?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que los valores se mantengan como datetime.datetime y se puedan comparar, puede convertir los valores de fecha de cadena en la columna en objetos datetime utilizando la función datetime.strptime(). Aquí hay un fragmento de código actualizado que hace esto:


    #Si el nombre del archivo es - 'Input_file' from openpyxl import load_workbook from datetime import datetime #Leyendo del archivo wb = load_workbook(Input_file) sheet = wb.active #Leyendo la columna de Fecha en el archivo Date_column = sheet['A'] #Leyendo cada fila y la fecha en cada fila para compararla con la fecha de la fila anterior for x in range(1, len(Date_column)): Datenow = datetime.strptime(Date_column[x].value, "%d-%m-%Y") # Convertir el valor de la fecha de la fila anterior a objeto datetime Datebef = datetime.strptime(Date_column[x-1].value, "%d-%m-%Y") Check = Datenow > Datebef print(Check)

    En este fragmento de código actualizado, se utiliza la función datetime.strptime() para convertir los valores de cadena de fecha en objetos datetime utilizando la cadena de formato ‘%d-%m-%Y’. Esta cadena de formato coincide con el formato de las fechas en el archivo de entrada.

    Al convertir ambas fechas en objetos datetime, ahora se pueden comparar con el operador mayor que.

Comments are closed.