TypeError:必须为整数(类型为Timestamp)

时间:2020-03-08 10:20:15

标签: python python-3.x pandas python-datetime

我有以下格式的Excel表:

enter image description here

我想使用Python pandas模块读取此表,并计算发布日期和当前日期之间的差额。这是我当前的代码:

    import pandas as pd
    import datetime as dt
    def abc():
        a=pd.read_excel('date time.xlsx')
        b=dt.date.today()
        print(b)
        c=(a['date of issue'])
        h=(c[0])
        f=dt.datetime(h)
        d=b-f
        print(d)
   abc()

它在第7行(f=dt.datetime(h))中显示错误。它显示为TypeError: an integer is required (got type Timestamp)

1 个答案:

答案 0 :(得分:7)

datetime模块是Python标准库的一部分。 datetime.datetime类的构造函数采用特定的年,月和日作为参数(Reference)。您将调用它例如与datetime.datetime(2020, 3, 8)

在您的代码中,您正在通过pandas库从Excel表中查询特定的单元格。该单元格恰好包含一个日期,pandas检测到该日期并将其转换为pandas.Timestamp对象。 pandas库不是Python标准库的一部分,因此,Python的datetime类不了解pandas.Timestamp。将pandas.Timestamp传递给datetime构造函数时,会收到错误消息TypeError: an integer is required (got type Timestamp)。这意味着datetime预期为整数(指定年份),但收到了pandas.Timestamp,它不明白。

但是,pandas确实了解datetime,并为您提供了一个辅助功能to_pydatetime,可以将pandas.Timestamp变成datetime对象({{3} })。在您的代码中,将f的分配替换为:

    f=h.to_pydatetime().date()

to_pydatetime()给您一个datetime.datetime对象,然后.date()将其变成一个datetime.date对象,这是d=b-f在下一行,即您为b分配了datetime.date.today()

或者,您也可以将b的声明更改为b=dt.datetime.now(),然后将f的赋值更改为f=h.to_pydatetime()。这将为您提供精确的时差,而不仅仅是天数。