如何在Pandas中将Excel时间格式转换为m:ss格式的字符串?
解决Pandas中datetime.time类型转m:ss格式的问题
问题分析
你遇到的报错根源在于:
pd.to_datetime()无法直接转换原生Python的datetime.time对象,它仅支持字符串、数值或Pandas内置的datetime64类型数据.dt访问器只适用于Pandas的datetime64或timedelta64类型列,而你的min列是原生datetime.time类型,因此无法调用该方法
解决方案
方案1:直接对datetime.time对象格式化
利用datetime.time对象自带的minute和second属性,自定义生成目标格式字符串:
# 假设你的DataFrame名为df df['min_formatted'] = df['min'].apply(lambda t: f"{t.minute}:{t.second:02d}")
- 说明:
t.minute提取无前置零的分钟数,t.second:02d确保秒数以两位数字显示(如3秒显示为03),完全匹配你需要的m:ss格式
方案2:转换为timedelta类型后处理
先将datetime.time转为字符串,再转换为Pandas的timedelta64类型,后续可借助时间差方法灵活处理:
# 转换为timedelta类型 df['min_timedelta'] = pd.to_timedelta(df['min'].astype(str)) # 基于总秒数格式化为m:ss total_seconds = df['min_timedelta'].dt.total_seconds() df['min_formatted'] = total_seconds.apply(lambda s: f"{int(s//60)}:{int(s%60):02d}")
- 优势:如果后续需要对时间做运算(如求和、排序),
timedelta类型会更便于操作
验证结果
处理后你的DataFrame会新增min_formatted列,内容示例如下:
| # | min | cause | min_formatted |
|---|---|---|---|
| 1 | 00:01:30 | db | 1:30 |
| 2 | 00:02:03 | db | 2:03 |
| 3 | 00:01:47 | ct | 1:47 |
内容的提问来源于stack exchange,提问作者MacKinzee
相关产品推荐
相关产品推荐

