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

DataFrame计算相邻Local Time时间差时遇TypeError问题求助

解决DataFrame计算相邻行时间差的TypeError问题

错误原因

你的代码报错是因为next_df是整个DataFrame下移一行后的完整Series,在apply的行处理函数中调用next_df['Local Time']时,拿到的是整列数据而非当前行对应的下一行单个datetime.time对象,而datetime.combine()要求第二个参数必须是单个time类型,因此触发类型不匹配错误。

解决方案

推荐使用pandas矢量化操作(比apply效率更高),以下是几种可行方案:

方案1:通过中间列转换为完整datetime后计算

import pandas as pd
from datetime import datetime, date

# 确保df['Local Time']是datetime.time类型
df['full_dt'] = df['Local Time'].apply(lambda t: datetime.combine(date.today(), t))
df['next_full_dt'] = df['full_dt'].shift(-1)
df['time_diff'] = df['next_full_dt'] - df['full_dt']

# 可选:删除中间辅助列
df.drop(['full_dt', 'next_full_dt'], axis=1, inplace=True)

方案2:直接矢量化计算(无中间列)

df['time_diff'] = (
    df['Local Time'].apply(lambda t: datetime.combine(date.today(), t)).shift(-1)
    - df['Local Time'].apply(lambda t: datetime.combine(date.today(), t))
)

方案3:若坚持使用apply(不推荐,效率低)

需要在函数中通过索引定位当前行的下一行数据:

def time_between(row):
    current_idx = row.name
    # 最后一行无下一行,返回空值
    if current_idx == df.index[-1]:
        return None
    next_time = df.loc[current_idx + 1, 'Local Time']
    return datetime.combine(date.today(), next_time) - datetime.combine(date.today(), row['Local Time'])

df['time_diff'] = df.apply(time_between, axis=1)

说明

  • 最终time_diff列的类型是timedelta,可以直接用于后续时间相关计算。
  • 最后一行的time_diff会是NaT(方案1、2)或None(方案3),因为没有下一行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:40:21