Python转换Excel特殊时间格式报错:hour must be in 0..23
问题解决:时间转换报错"hour must be in 0..23"
错误原因
- 重复调用
pd.to_datetime完全多余,第一次转换后df['start']已经是datetime类型,二次转换反而会引发格式冲突。 - 格式符
#H是无效写法,这是导致小时范围错误的核心问题——pandas无法识别这个格式,解析时会把小时部分解析出超出0-23的数值。
正确处理步骤
1. 正确解析原始时间格式
先确保用匹配Excel原始时间的格式符解析列:
- 若Excel里的时间格式是
yy/mm/dd #HH:MM:SS(比如25/03/12 #14:07:41),格式符要写成%y/%m/%d #%H:%M:%S,其中%H代表24小时制小时(0-23),不会触发范围错误。 - 若pandas能自动识别原始时间,可跳过手动解析,直接格式化。
2. 转换成目标格式
用dt.strftime将datetime类型转成12.07.41am格式,其中:
%I:12小时制小时(1-12)%M:分钟%S:秒%p:AM/PM标识,最后用.str.lower()转成小写。
完整代码示例
import pandas as pd # 第一步:解析原始时间(根据实际格式调整format参数) df['start'] = pd.to_datetime(df['start'], format='%y/%m/%d #%H:%M:%S') # 第二步:转换成目标格式 df['start_formatted'] = df['start'].dt.strftime('%I.%M.%S%p').str.lower()
简化场景(自动识别原始时间)
如果pandas无需指定format就能正确解析start列,直接格式化即可:
df['start_formatted'] = df['start'].dt.strftime('%I.%M.%S%p').str.lower()
内容的提问来源于stack exchange,提问作者Jayl
相关产品推荐
相关产品推荐

