Datetime nesnelerinin karşılaştırılması-Python

0

Soru

Aşağıdaki gibi görünen bir veri dosyam var:

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

Veri temizleme işleminin bir parçası olarak, verilerin kronolojik sırada olup olmadığını kontrol etmem gerekiyor. Bu yüzden, bir satırdaki tarihin önceki satırdaki tarihten sonra olup olmadığını kontrol etmem gerekiyor. Değilse, o satırı silmem gerekiyor. Pandalar kütüphanesini kullanmamam emredildi.

Şimdiye kadar, şu ana kadar aşağıdaki adımları uyguladım:



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

Datetime nesnelerini karşılaştırmaya çalıştığımda hata alıyorum :


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

Sorun şu ki, tarih sütununun türünü kontrol ettiğimde, datetime olarak çıkıyor.datetime ama her ikisini de karşılaştırmaya çalıştığım anda datetime.datetime nesneleri, bana birinin string ve birinin datetime olduğunu söylüyor.datetime nesnesi. Karışıklık, her iki değerin de aynı sütundan okunup okunmadığı, birinin dize olarak nasıl çıktığı ve birinin datetime olup olmadığıdır.datetime.

Değerlerin datetime olarak kalmasını nasıl sağlayabilirim.datetime ve ben onları karşılaştırabiliriz.

Teşekkürler

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

En iyi cevabı

0

Karşılaştırmadan önce hücrenin veri türünü kontrol edebilirsiniz. Ayrıca, karşılaştırmalar ve silme satırlarının sırası hakkında dikkatlice düşünmeniz gerekir, çünkü bunu yaparken bunu yapamazsınız. Bunun yerine, silinecek satırların bir listesini oluşturmanız ve bunları ters sırada silmeniz gerekir.

Böyle bir şey işe yaramalı.

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

Diğer dillerde

Bu sayfa diğer dillerde

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