繁体   English   中英

比较日期时间对象 - Python

[英]Comparing the datetime objects - Python

我有一个如下所示的数据文件:

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

作为数据清理过程的一部分,我需要检查数据是否按时间顺序排列。 所以我需要检查一行中的日期是否在上一行的日期之后。 如果没有,我需要删除该行。 我被指示不要使用 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)

当我尝试比较日期时间对象时出现的错误是:


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

问题是当我检查日期列的类型时,它是 datetime.datetime 但是当我尝试比较两个 datetime.datetime 对象时,它告诉我一个是字符串,一个是 datetime.datetime object . 令人困惑的是,如果两个值都是从同一列中读取的,一个是如何作为字符串输出的,一个是 datetime.datetime。

如何确保这些值保持为 datetime.datetime 并且我可以比较它们。

谢谢

您可以在比较之前检查单元格的数据类型。 此外,您需要仔细考虑比较和删除行的顺序,因为您在 go 时无法执行此操作。 相反,您将需要创建要删除的行列表,然后以相反的顺序删除它们。

像这样的东西应该工作。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM