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

使用Pandas转换Excel格式时间字符串为datetime的报错咨询

解决Pandas转换特殊时间字符串为datetime的问题

错误原因

  • 格式字符串错误:你写的[%d.%H:%M%S]多了不必要的方括号,且漏写了分钟和秒之间的冒号,正确的带天数格式应为%d.%H:%M:%S
  • 格式不兼容:现有格式只能匹配带天数的字符串,无法处理00:00:00这类纯时分秒的格式,导致匹配失败报错

解决方案

先统一所有时间字符串的格式,再转换为时间差(timedelta),最后结合基准日期生成datetime对象:

  1. 统一格式:给不含.的纯时分秒字符串添加0.前缀,确保所有字符串都符合天数.小时:分钟:秒的格式
  2. 转换为时间差:用pd.to_timedelta解析统一后的字符串
  3. 生成datetime:将时间差与一个基准日期(比如Excel默认起始日期1900-01-01)相加,得到标准datetime类型

完整代码

import pandas as pd

data = {'Raw_time_string':['00:00:00','00:00:01','23:59:59','1.00:00:01','357.23:59:59']}
df = pd.DataFrame(data=data)

# 统一时间格式
df['Formatted_time'] = df['Raw_time_string'].apply(lambda x: f'0.{x}' if '.' not in x else x)

# 转换为datetime对象(基于Excel默认基准日期)
base_date = pd.Timestamp('1900-01-01')
df['Time_object'] = base_date + pd.to_timedelta(df['Formatted_time'])

# 查看结果
print(df[['Raw_time_string', 'Time_object']])

输出结果

Raw_time_string         Time_object
0        00:00:00 1900-01-01 00:00:00
1        00:00:01 1900-01-01 00:00:01
2        23:59:59 1900-01-01 23:59:59
3      1.00:00:01 1900-01-02 00:00:01
4    357.23:59:59 1901-01-12 23:59:59

补充说明

如果只需要计算时长而非具体日期,可直接保留时间差对象:

df['Time_duration'] = pd.to_timedelta(df['Formatted_time'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:48:24