【问题标题】:TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.time'TypeError: 不支持的操作数类型 -: 'datetime.datetime' 和 'datetime.time'
【发布时间】:2019-02-21 15:40:37
【问题描述】:
import pandas as pd
import datetime


df = pd.read_excel('c:/users/user/documents/finance deck coils data.xlsx')
df = df[['Coil Number','Amnt Left'] ]


df2 = pd.read_excel('c:/users/user/documents/Deck Coils Data.xlsx')
df3 = pd.merge(df, df2, how='right', on='Coil Number')

writer = pd.ExcelWriter('c:/users/user/documents/test.xlsx')
df3.to_excel(writer, sheet_name = 'Original', index=False)
df3.loc[df3['Recieved Date'].isnull()].to_excel(writer, sheet_name= 'Zero Fifo', index=False)
df3.loc[(datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(180)].to_excel(writer, sheet_name= 'Under 6 Months', index=False)
df3.loc[((datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(181)) & ((datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(365))].to_excel(writer, sheet_name= '6 to 12 Months', index=False)
df3.loc[((datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(366)) & ((datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(730))].to_excel(writer, sheet_name= '12 to 24 Months', index=False)
df3.loc[(datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(731)].to_excel(writer, sheet_name= 'Over 24 Months', index=False)
writer.save()

我在这一行遇到错误:

df3.loc[(datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(180)].to_excel(writer, sheet_name= 'Under 6 Months', index=False)

df3['Recieved Date'] 数据类型是对象。我不知道是否需要将其转换为日期时间。我该怎么做?日期格式如下:

2017-06-22 00:00:00

【问题讨论】:

    标签: python-3.x pandas datetime


    【解决方案1】:

    我会使用 datetime 模块中的解析工具将整个“Received Date”列转换为 datetime 对象。假设时间是 12 小时制,对于给定的日期格式,它看起来像这样:

    def parse_datetime(date_to_convert):
        pattern = "%Y-%m-%d %I:%M:%S"
        return datetime.datetime.strptime(date_to_convert,pattern)
    

    然后你可以像这样将它应用到数据框:

    df3['Received Date'] = df3['Received Date'].apply(lambda row: parse_datetime(row))
    

    如果存在您不想解析的值,您还可以在函数中添加错误处理。

    【讨论】:

    • 我收到以下错误:TypeError: strptime() argument 1 must be str, not datetime.datetime
    • 好的,所以可能会发生两件事。 1)整个列的格式已经正确,并且其他原因导致了原始错误。或 2) 有些行的格式正确,有些则不正确。 (当我将 excel 文件导入 pandas 之前,我已经看到过这种情况。)添加 try 和 except TypeError 子句,以便在出现 TypeError 时函数返回 date_to_convert 而没有任何格式。
    • 我收到以下错误:TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.time'
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2021-05-22
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多