【问题标题】:TypeError: an integer is required (got type Timestamp)TypeError:需要一个整数(获取类型时间戳)
【发布时间】:2020-06-20 12:19:33
【问题描述】:
我有一个格式如下的 Excel 表格:
我想通过 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)。
【问题讨论】:
标签:
python
python-3.x
pandas
python-datetime
【解决方案1】:
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 对象 (reference)。在您的代码中,将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()。这将为您提供精确的时差,而不仅仅是天数的差异。