Comparando a objetos datetime - Python

0

Pergunta

Eu tenho um arquivo de dados que se parece com o seguinte:

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

Como parte do processo de limpeza de dados, eu preciso verificar se os dados em ordem cronológica. Então eu preciso verificar que a data em uma linha é após a data na linha anterior. Se não, eu preciso excluir essa linha. Eu sou instruído a não utilizar os pandas biblioteca.

Até agora, eu fiz os seguintes passos até agora:



#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)

O erro é quando tenta comparar o datetime objetos é :


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

O problema é quando eu verificar o tipo de coluna "data", que vem a ser datetime.datetime, mas assim que eu tente comparar os datetime.datetime objetos, ele me diz que é uma seqüência de caracteres e um é datetime.objeto datetime. A confusão é se ambos os valores são lidos a partir mesma coluna, Como um está saindo como cadeia e é datetime.data / hora.

Como posso ter certeza de que os valores de permanecer como datetime.data / hora e que eu possa compará-los.

Obrigado

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

Melhor resposta

0

Você pode verificar o tipo de dados da célula antes de compará-la. Além disso, você precisa pensar cuidadosamente sobre as comparações e o fim da exclusão de linhas, porque você não pode fazer isso enquanto você for lá. Em vez disso, você precisará criar uma lista de linhas para eliminá-los e apagá-los na ordem inversa.

Algo como isso deve 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

Em outros idiomas

Esta página está em outros idiomas

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