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
相关产品推荐
相关产品推荐

