En comparant les objets datetime - Python

0

La question

J'ai un fichier de données qui se présente comme suit:

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

En tant que partie du processus de nettoyage des données, j'ai besoin de vérifier que les données sont dans l'ordre chronologique. J'ai donc besoin de vérifier que la date dans une rangée après la date de la rangée précédente. Si non, j'ai besoin de supprimer cette ligne. J'ai reçu instruction de ne pas utiliser les pandas de la bibliothèque.

Jusqu'à présent, j'ai fait les étapes suivantes jusqu'à présent:



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

L'erreur, c'est arriver quand j'ai essayer de comparer les objets datetime est :


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

Le problème est quand j'ai vérifier le type de la colonne de date, il sort pour être de type datetime.datetime, mais dès que j'essaie de comparer les deux datetime.datetime objets, il me dit que l'on est en string et un est de type datetime.objet datetime. La confusion est si les deux valeurs sont lues à partir de la même colonne, la Façon dont on est le coming-out en tant que chaîne et l'un est de type datetime.datetime.

Comment m'assurer que les valeurs de séjour en datetime.datetime et je peux comparer.

Merci

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

La meilleure réponse

0

Vous pouvez vérifier le type de données de la cellule avant de les comparer. Aussi, vous aurez besoin de réfléchir soigneusement les comparaisons et l'ordre de la suppression de lignes parce que vous ne peut pas le faire pendant que vous allez. Au lieu de cela, vous aurez besoin pour créer une liste de lignes à supprimer et à supprimer dans l'ordre inverse.

Quelque chose comme cela devrait fonctionner.

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

Dans d'autres langues

Cette page est dans d'autres langues

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