Porovnanie datetime objekty - Python

0

Otázka

Mám súbor údajov, ktoré vyzerá takto:

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

Ako súčasť údaje čistiaci proces, potrebujem zistiť, že údaje v chronologickom poradí. Tak som musieť skontrolovať, že dátum v rade je po dátume v predchádzajúcom riadku. Ak nie, musím odstrániť riadok. Ja som pokyn, aby sa nesmie používať pandy knižnice.

Zatiaľ, čo som urobil nasledujúce kroky tak ďaleko:



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

Chyba je dostať keď som skúsiť porovnať datetime objektov je :


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

Problém je, keď som skontrolovať typ dátum stĺpec, ide von byť datetime.datetime ale hneď, ako som sa skúsiť porovnať obe datetime.datetime objektov, to mi hovorí, že jeden je reťazec a jeden je datetime.datetime objektu. Zmätok je, ak obe hodnoty sú čítanie z toho istého stĺpca, Ako človek prichádza na to, ako reťazec a jeden je datetime.datetime.

Ako môžem uistite sa, že hodnoty zostávajú, ako datetime.datetime a môžem porovnávať ich.

Vďaka

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

Najlepšiu odpoveď

0

Môžete skontrolovať údaje typ bunky pred porovnávať. Tiež budete musieť starostlivo premýšľať o porovnávanie a poradie vymazanie riadkov, pretože si nemôže to urobiť, keď ste ísť. Namiesto toho budete musieť vytvoriť zoznam riadkov, ktoré sa majú vymazať, a ich vymazávať ich v opačnom poradí.

Niečo podobné by to malo fungovať.

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

V iných jazykoch

Táto stránka je v iných jazykoch

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