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.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"]
中的内容
我正在尝试在 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.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"]