我想对两个熊猫系列求和。 第一个系列是 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'
我如何总结这两个系列?
这个错误非常明显。如果您检查元素的类型,您会发现在某些时候您需要添加
datetime.time
对象和 pandas.Timedelta
。
有 2 种日期、时间和时间增量:
datetime
模块,即 datetime.time
、datetime.date
、datetime.timedelta
、...pandas.Timestamp
、pandas.Timedelta
这两个堆栈对于加法或比较等基本操作不兼容。
将所有内容转换为 pandas 类型并提取最后的时间
您应该确保您的列中的
dtypes
类似于 datetime64[ns]
和 timedelta64[ns]
。为此,请尝试使用 pd.to_datetime
和 pd.to_timedelta
显式转换它们。
另一种方法是将
Delta
列转换为 datetime.timedelta
你可以尝试
df["end_Time"] = df["Start_Time"] + df["Delta"].map(pd.Timedelta.to_pytimedelta)
但是您可能会遇到更多错误,具体取决于您的
df["Delta"]
和 df["Start_Time"]
中的内容
试试这个:
import datetime as dt
df["end_Time"] = df["Start_Time"] + df["Delta"].map(dt.timedelta)