Porównywanie obiektów datetime - Python

0

Pytanie

Mam plik danych, który wygląda w następujący sposób:

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

W ramach procesu czyszczenia danych muszę sprawdzić, że dane znajdują się w porządku chronologicznym. Więc muszę sprawdzić, czy data w wierszu warto po dniu, w poprzednim wierszu. Jeśli nie, muszę usunąć ten wiersz. Mi nie wolno korzystać z biblioteki pandy.

Do tej pory wykonywałem następujące kroki:



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

Błąd występuje, gdy próbuję porównać obiekty daty i czasu :


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

Problem w tym, że gdy sprawdzam typ kolumny chcesz, to okazuje się datetime.datetime, ale jak tylko próbuję porównać obie obiektu datetime.datetime, on mi mówi, że jeden z nich-ciąg znaków, drugi-obiekt datetime.datetime. Zamieszanie polega na tym, że jeśli obie wartości są odczytywane z jednego i tego samego kolumny, jedna z nich jest wyświetlany jako ciąg znaków, a inne-jak datetime.datetime.

Jak mogę upewnić się, że wartości pozostają w formacie datetime.datetime, i mogę je porównać.

Dziękuję

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

Najlepsza odpowiedź

0

Można sprawdzić typ danych komórki, zanim porównać ją. Ponadto, trzeba będzie starannie pomyśleć o porównaniach i porządku usuwania wierszy, bo nie jesteś w stanie zrobić to podczas przejścia. Zamiast tego trzeba będzie utworzyć listę wierszy do usuwania i usunąć je w odwrotnej kolejności.

Coś takiego powinno zadziałać.

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

W innych językach

Ta strona jest w innych językach

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