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

处理CSV日期时间差值时遇Type error: cannot subtract DateTimeArray from ndarray错误求助

问题解决:Type error: cannot subtract DateTimeArray from ndarray

错误根源

你代码里的核心问题是pd.to_datetime(df["Date/Time Opened"]).dt.date这个操作——它返回的是Python原生date对象组成的numpy数组(ndarray),而非pandas的DatetimeArray。当你给这个ndarray加上pd.DateOffset(hours=17)后,类型逻辑混乱,后续和原DatetimeArray相减就触发了类型不匹配错误。

修正方案

直接在pandas的DatetimeArray上构造目标时间(当天17点),全程避免转成原生date对象:

分步写法(清晰易读)

# 先将原列转为datetime类型,避免重复调用pd.to_datetime
df["dt_opened"] = pd.to_datetime(df["Date/Time Opened"])

# 构造当天17:00的datetime对象
df["target_time"] = df["dt_opened"].dt.floor("D") + pd.DateOffset(hours=17)

# 计算时间差总秒数,补充np.where的判断逻辑(示例)
df["open_time"] = np.where(
    # 这里替换成你的实际判断条件,比如时间差为正
    (df["target_time"] - df["dt_opened"]).dt.total_seconds() > 0,
    (df["target_time"] - df["dt_opened"]).dt.total_seconds(),
    0  # 示例默认值,按需调整
)

# 可选:删除临时辅助列
df.drop(["dt_opened", "target_time"], axis=1, inplace=True)

简化写法(无临时列)

如果不想新增临时列,可直接链式操作:

dt_opened = pd.to_datetime(df["Date/Time Opened"])
target_time = dt_opened.dt.floor("D") + pd.DateOffset(hours=17)

df["open_time"] = np.where(
    # 替换为你的实际判断条件
    (target_time - dt_opened).dt.total_seconds() > 0,
    (target_time - dt_opened).dt.total_seconds(),
    0
)

关键注意点

  • 始终用pandas的DatetimeArray(即pd.to_datetime返回的Series)进行时间运算,不要转成原生date对象
  • dt.floor("D")会把datetime截断到当天0点,再加17小时即可得到当天17点的标准时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:23:10