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格式是不可变的。我想念什么吗?
错误非常明显。如果检查元素的类型,您会发现在某些时候您将添加datetime.time对象和pandas.Timedelta。
有两种日期,时间和时间增量:
datetime模块,即datetime.time,datetime.date,datetime.timedelta,...pandas.Timestamp,pandas.Timedelta这两个堆栈对于基本操作(如加法或比较)而言是不兼容的。
将所有内容转换为熊猫类型并最终提取时间
您应该确保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)
Run Code Online (Sandbox Code Playgroud)
但是您可能会遇到更多错误,具体取决于您df["Delta"]和df["Start_Time"]