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

Doc*_*hom 6 python timedelta python-datetime pandas python-3.6

我试图在熊猫的数据帧中添加两个系列,第一个系列是从excel文件导出的24小时时间值(例如17:30),第二个系列是从转换为Timedelta格式的相同长度的系列使用“ pd.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
Run Code Online (Sandbox Code Playgroud)

我的目标是:

df["end_Time"] = df["Start_Time"] + df["Delta"]  
Run Code Online (Sandbox Code Playgroud)

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

看来此datetime.time格式是不可变的。我想念什么吗?

mat*_*sko 8

原因

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

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

  • 从python的内置datetime模块,即datetime.timedatetime.datedatetime.timedelta,...
  • 熊猫/ numpy的pandas.Timestamppandas.Timedelta

这两个堆栈对于基本操作(如加法或比较)而言是不兼容的。

解决方案1

将所有内容转换为熊猫类型并最终提取时间

您应该确保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)
Run Code Online (Sandbox Code Playgroud)

但是您可能会遇到更多错误,具体取决于您df["Delta"]df["Start_Time"]