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

Pandas to_datetime()格式转换报错、AM/PM识别及去零问题咨询

Pandas时间格式转换问题解决方案

1. 报错原因修正

你遇到的ValueError: 's' is a bad directive报错是因为格式符使用错误,核心错误点如下:

  • 秒的格式符为大写%S,小写%s是UNIX时间戳标识,不属于Python strptime支持的时间格式指令
  • 分钟的格式符为大写%M,你误用了代表月份数字的%m
  • 原时间串的月份为英文缩写(如AUG),需要用%b匹配,不能用%m
  • 原时间串尾部的纳秒序列需要用%f匹配,无需提前处理也可完成转换

正确的转换代码示例:

import pandas as pd

# 输入时间字符串
time_str = "03-AUG-20 02.55.32.000000000 AM"
# 按输入格式完成时间类型转换
dt = pd.to_datetime(time_str, format="%d-%b-%y %I.%M.%S.%f %p")
# 转换为你需要的 日-月-年 时(24):分:秒 格式
result = dt.strftime("%d-%m-%Y %H:%M:%S")

执行后result的输出为03-08-2020 02:55:32,符合预期格式。

2. 正则去除尾部多余零的方法

如果你需要提前剔除时间字符串尾部的纳秒零,可用如下正则表达式实现:

  • 匹配规则:r'\.\d+(?=\s+[AP]M)',作用是匹配AM/PM前所有小数点开头的数字序列
  • 代码示例:
import re
processed_str = re.sub(r'\.\d+(?=\s+[AP]M)', '', time_str)
# 处理后得到字符串:03-AUG-20 02.55.32 AM

处理后转换时间时,可将格式串中的.%f移除,改为format="%d-%b-%y %I.%M.%S %p"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:06:02