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

Pandas用to_datetime转换索引时报hour必须在0..23区间错误如何解决

错误原因

报错是因为时间字符串中存在24:00这类不符合标准时间格式的取值,标准时间规则下小时取值范围为0~23,24:00属于部分数据源的特殊标注方式,本质对应次日的00:00,pandas默认时间解析器不支持该格式所以抛出错误。

解决方案

步骤1:调整csv读取逻辑,先不自动解析日期

先将date列以字符串格式读取,避免读取阶段就触发解析错误:

import pandas as pd

dataframe = pd.read_csv("file_name.csv", 
                        dayfirst = True, 
                        index_col = 'date', 
                        header = 2, 
                        na_values = ['-99.0'],
                        dtype={'date': str}) # 强制指定date列为字符串类型

步骤2:处理24:00特殊格式

识别所有带24:00的时间条目,替换为00:00后转时间格式,再给对应条目补1天偏移:

# 将索引转为Series方便批量处理
date_series = pd.Series(dataframe.index)
# 标记所有包含24:00的行
mask = date_series.str.contains('24:00', na=False)
# 把24:00替换为符合标准的00:00
date_series = date_series.str.replace('24:00', '00:00')
# 转换为datetime格式
date_series = pd.to_datetime(date_series, dayfirst=True)
# 给原本是24:00的条目加1天,对齐实际语义
date_series[mask] = date_series[mask] + pd.Timedelta(days=1)
# 替换回数据集索引
dataframe.index = date_series

可选简化方案(适用于pandas 2.0及以上版本)

高版本pandas的时间解析器支持自动处理24:00格式,直接添加strict=False参数即可:

dataframe.index = pd.to_datetime(dataframe.index, format='%d/%m/%Y %H:%M', 
                                 dayfirst=True, strict=False)

验证

处理完成后执行以下代码确认转换结果:

print(dataframe.index.dtype)
# 输出`datetime64[ns]`即表示转换成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:18:02