Pandas字符串时间转timedelta计算DataFrame时间差方案
如何将DataFrame中字符串时间转为timedelta实现计算列
报错根因
- 标准库
datetime.strptime仅支持单个字符串入参,无法直接传入Pandas Series整列对象,因此触发TypeError: strptime() argument 1 must be str, not Series错误。 - 未做类型转换的字符串时间列仅能在格式完全一致时做大小比较,无法直接执行减法计算时间差。
实现方案
使用Pandas内置的pd.to_timedelta完成向量化类型转换,该方法原生支持整列数据处理,无需循环,转换后的列直接支持时间比较、差值计算。
完整代码如下:
import pandas as pd import numpy as np # 构造示例数据 pricetime = pd.DataFrame({ 'price1': [22.34, 44.68, 52.98], 'time1': ['9:48:14', '15:54:33', '13:13:22'], 'price2': [28.88, 47.68, 22.32], 'time2': ['10:52:44', '15:59:59', '10:12:22'] }) # 核心转换:将字符串格式时间转为timedelta类型 pricetime['time1'] = pd.to_timedelta(pricetime['time1']) pricetime['time2'] = pd.to_timedelta(pricetime['time2']) # 条件计算价格变动率 pricetime['price_change'] = np.where( pricetime['time1'] < pricetime['time2'], (pricetime['price1'] - pricetime['price2']) / pricetime['price2'], np.nan ) # 条件计算时间差,时间类型空值使用pd.NaT适配类型 pricetime['time_diff'] = np.where( pricetime['time1'] < pricetime['time2'], pricetime['time2'] - pricetime['time1'], pd.NaT )
补充说明
- 转换后的
time_diff列为timedelta类型,如需转为数值型时长(比如秒、分钟),可使用dt.total_seconds()、dt.total_seconds()/60等方法快速换算。 - 不需要额外导入datetime库的timedelta,Pandas的timedelta类型可以直接完成所有运算。
内容的提问来源于stack exchange,提问作者Marc_Law
相关产品推荐
相关产品推荐

