Python Pandas:类型错误:+ 不支持的操作数类型:“datetime.time”和“Timedelta”

问题描述 投票:0回答:2

我想对两个熊猫系列求和。 第一个系列是 hh:mm 时间值;第二个系列包含从

pd.Timedelta
获得的 Timedelta 对象。

无论日期如何变化,预期结果都是 hh:mm 时间(例如 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: unsupported operand type(s) for +: 'datetime.time' and 'Timedelta'

我如何总结这两个系列?

python pandas python-3.6 timedelta python-datetime
2个回答
21
投票

原因

这个错误非常明显。如果您检查元素的类型,您会发现在某些时候您需要添加

datetime.time
对象和
pandas.Timedelta

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

  • python 内置于
    datetime
    模块,即
    datetime.time
    datetime.date
    datetime.timedelta
    、...
  • pandas / numpy 即
    pandas.Timestamp
    pandas.Timedelta

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

解决方案1

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

您应该确保您的列中的

dtypes
类似于
datetime64[ns]
timedelta64[ns]
。为此,请尝试使用
pd.to_datetime
pd.to_timedelta
显式转换它们。

解决方案2

另一种方法是将

Delta
列转换为
datetime.timedelta
你可以尝试

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

但是您可能会遇到更多错误,具体取决于您的

df["Delta"]
df["Start_Time"]

中的内容

2
投票

试试这个:

import datetime as dt

df["end_Time"] = df["Start_Time"] + df["Delta"].map(dt.timedelta)
© www.soinside.com 2019 - 2024. All rights reserved.