เปรียบเทียบที่ datetime™à§à±à•à-à-เป็นภาษาไพธอน

0

คำถาม

ฉันมีข้อมูลของแฟ้มซึ่งดูเหมือนว่าต่อไปนี้:

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

เป็นส่วนหนึ่งของข้อมูลทำความสะอาดกระบวนการฉันต้องตรวจสอบว่าข้อมูลอยู่ใน chronological คำสั่ง ดังนั้นฉันต้องตรวจสอบว่าวันที่ในแถวเป็นหลังจากวันที่ก่อนหน้านั่น ถ้าไม่ผมต้องการที่จะลบที่นั่น ฉันรับคำสั่งให้อารักไม่ใช้ pandas องสมุด

ถึงตอนนี้ฉันต้องทำตามขั้นตอนดังนั้นห่างไกล:



#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 คือวัตถุ:


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

ปัญหาคือตอนที่ฉันเช็คประเภทของวันคอลัมน์มันออกมาเป็น datetime.datetime แต่ทันทีที่ฉันพยายามที่จะเปรียบเทียบทั้งสองคน datetime.datetime วัตถุมันบอกฉันว่านั่นคือข้อความและอีกหนึ่งคือ datetime.datetime เดาใจ รับความวุ่นวายที่เกิดขึ้นหากทั้งสองค่าถูกอ่านมาจากที่เดียวกันคอลัมน์ยังไงคนกำลังจะออกมาจากเป็นข้อความและอีกหนึ่งคือ datetime.datetime.

ผมต้องทำยังไงให้มั่นใจว่าค่ายอยู่ที่ datetime.datetime และฉันสามารถเปรียบเทียบพวกเขา

ขอบคุณ

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

คำตอบที่ดีที่สุด

0

คุณสามารถตรวจสอบข้อมูลประเภทของเซลล์ก่อนที่คุณเปรียบเทียบมัน แล้วก็คุณจะต้องคิดตริตรองดูให้ดีก่อนเรื่อง comparisons และคำสั่งของการลบแถวเพราะว่าคุณ ไม่สามารถ ทำอย่างนี้ขณะที่คุณไปแล้ว แทนที่จะเป็นคุณจะต้องสร้างรายการของแถวเพื่อลบและพวกเขาลบมันอยู่ย้อนกลับคำสั่ง

บางอย่างเหมือนนี้ควรจะทำงานแล้ว

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

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่