You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将timedelta时间差转为百分比?解决DatetimeArray除法报错

解决方案

错误原因

你遇到的TypeError是因为Pandas的DatetimeArray不支持直接除法运算,必须先将时间类型转换为数值型(如时间戳秒数、纳秒数)后才能进行算术操作。

方案1:基于已有的diff(s)列计算差值百分比(推荐)

既然你已经有了diff(s)列(存储的是Finish Time与最小值的时间差,类型为timedelta64[ns]),可以直接基于它计算百分比,无需再操作原Finish Time列:

场景A:差值占总时间跨度的百分比

如果要计算每个时间差相对于整个数据集时间跨度的占比:

# 计算总时间跨度的秒数
total_span_seconds = (df["Finish Time"].max() - df["Finish Time"].min()).total_seconds()
# 将diff(s)转为秒数后计算百分比
df["diff(%)"] = (df["diff(s)"].dt.total_seconds() / total_span_seconds) * 100

场景B:差值相对于最早时间的百分比

如果要计算时间差相对于**最早时间(最小值)**的比例:

# 将最早时间转为秒数
min_time_seconds = df["Finish Time"].min().total_seconds()
# 将diff(s)转为秒数后计算百分比
df["diff(%)"] = (df["diff(s)"].dt.total_seconds() / min_time_seconds) * 100

方案2:修正原代码逻辑(直接操作Finish Time)

如果坚持要按原代码的思路(计算时间点本身的比例),可以先将Finish Time转为Unix时间戳(秒数)再计算:

# 将Finish Time转为秒级时间戳
finish_seconds = df["Finish Time"].dt.total_seconds()
min_finish_seconds = finish_seconds.min()
# 计算百分比
df["diff(%)"] = (finish_seconds / min_finish_seconds) * 100

如果要的是时间差相对于最早时间的百分比(而非时间点本身的比例),则调整为:

finish_seconds = df["Finish Time"].dt.total_seconds()
min_finish_seconds = finish_seconds.min()
df["diff(%)"] = ((finish_seconds - min_finish_seconds) / min_finish_seconds) * 100

内容的提问来源于stack exchange,提问作者Hansson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:45:37