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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:27:26