Python Pandas: TypeError: unsupported operand type(s) for +: 'datetime.time' and 'Timedelta'

Python Pandas: TypeError: unsupported operand type(s) for +: 'datetime.time' and 'Timedelta'

我正在尝试在 pandas 的数据框中添加两个系列,第一个系列是从 excel 文件导出的 24 小时时间值(例如 17:30)和第二个系列是使用 'pd.Timedelta' 命令从浮点数转换而来的 Timedelta 格式的相同长度系列。

无论日期如何变化,所需的第三列结果都是 24 小时制(例如 22:00 + 4 小时 = 02:00)。

我是这样创建 Delta 系列的:

delta = pd.Series(0 for x in range(0, len(df.Time_In_Hours)))

for j in range(0, len(df.Time_In_Hours)):
    delta[j] = pd.Timedelta(df.Time_In_Hours[j], 'h')
df = df.assign(Delta = delta)   
print ("Delta dtype = %s" % (df.Delta.dtype))
print ("Start_Time dtype = %s" % (df.Start_Time.dtype))

#Output
Delta dtype = object
Start_Time dtype = object

我的目标是:

df["end_Time"] = df["Start_Time"] + df["Delta"]  

我收到的错误是: TypeError:+ 不支持的操作数类型:'datetime.time' 和 'Timedelta'

看来这个datetime.time格式是不可变的。我错过了什么吗?

试试这个:

import datetime as dt

df["end_Time"] = df["Start_Time"] + df["Delta"].map(dt.timedelta)

原因

错误很明显。如果您检查元素的类型,您会发现在某些时候您需要添加 datetime.time 对象和 pandas.Timedelta

有两种日期、时间和时间增量:

  • python's builtin from datetime module 即 datetime.time, datetime.date, datetime.timedelta, ...
  • pandas / numpy 即 pandas.Timestamppandas.Timedelta

这两个堆栈对于加法或比较等基本操作不兼容。

解决方案 1

将所有内容转换为pandas类型并在最后提取时间

您应该确保 dtypes 列类似于 datetime64[ns]timedelta64[ns]。为此,请尝试使用 pd.to_datetimepd.to_timedelta.

显式转换它们

解决方案 2

另一种方法是将 Delta 列转换为 datetime.timedelta 您可以尝试

df["end_Time"] = df["Start_Time"] + df["Delta"].map(pd.Timedelta.to_pytimedelta)

但是您可能 运行 会出现更多错误,具体取决于 df["Delta"]df["Start_Time"]

中的内容