将DataFrame列转换为datetime格式时出现格式匹配错误
解决DataFrame中Time列转datetime格式的问题
我来帮你搞定这个时间转换的坑!你遇到的错误根源在于Time列的数值类型和字符串格式不匹配:你的Time是float类型,当直接传给pd.to_datetime时,像132550.0这样的数值会被转换成字符串'132550'(丢失了小数部分),或者'132550.0',这两种都不符合你指定的%H%M%S.%f格式(要求必须有6位小数的秒数部分)。
修正步骤
- 先将数值格式化为标准的时间字符串:确保所有值都变成
HHMMSS.ffffff的格式,保留6位小数,哪怕是末尾的0也不能丢。 - 再转换为datetime并提取时间部分:用格式化后的字符串去匹配
%H%M%S.%f格式,就能成功转换了。
修正后的代码
import pandas as pd # 先格式化Time列为标准的6位小数字符串 df['Time'] = df['Time'].apply(lambda x: f"{x:.6f}") # 转换为datetime并提取时间部分 df['Time'] = pd.to_datetime(df['Time'], format="%H%M%S.%f").map(lambda x: x.time()) # 测试输出 print(df["Time"][0]) # 输出 13:25:50 print(df["Time"][1]) # 输出 13:25:50.013906
额外说明
- 用
f"{x:.6f}"可以强制把每个数值都格式化为带6位小数的字符串,完美匹配%H%M%S.%f的格式要求。 - 如果你的Time列里还有整数类型的值(比如没有小数部分的),这个方法也能统一处理,不会出错。
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

