使用Pandas转换Excel格式时间字符串为datetime的报错咨询
解决Pandas转换特殊时间字符串为datetime的问题
错误原因
- 格式字符串错误:你写的
[%d.%H:%M%S]多了不必要的方括号,且漏写了分钟和秒之间的冒号,正确的带天数格式应为%d.%H:%M:%S - 格式不兼容:现有格式只能匹配带天数的字符串,无法处理
00:00:00这类纯时分秒的格式,导致匹配失败报错
解决方案
先统一所有时间字符串的格式,再转换为时间差(timedelta),最后结合基准日期生成datetime对象:
- 统一格式:给不含
.的纯时分秒字符串添加0.前缀,确保所有字符串都符合天数.小时:分钟:秒的格式 - 转换为时间差:用
pd.to_timedelta解析统一后的字符串 - 生成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
相关产品推荐
相关产品推荐

