处理pandas日期转换时的OutOfBoundsDatetime纳秒时间戳越界错误
日期转换报错问题排查与解决
我正在处理一个包含棒球比赛日期(Date)和观众人数(Attendance)的DataFrame,用于制作日历热力图。数据如下:
Date Attendance 1 Apr 7 44723.0 2 Apr 8 42719.0 3 Apr 9 36139.0 4 Apr 10 41253.0 5 Apr 11 20480.0
我尝试了以下两种日期转换方法:
- df['Date'] = df['Date'].astype('datetime64[ns]') - df['Date'] = pd.to_datetime(df['Date'])
但均报错:
'Out of bounds nanosecond timestamp: 1-04-07 00:00:00'.
查看数据后发现,我并没有对应该时间戳的日期。参考相关帖子后,怀疑问题可能是日期未补零?请问这是否是导致错误的原因?
日期未补零不是报错的直接原因,真正问题出在:你的日期数据只有月份缩写(Apr)和日期(7/8/9等),缺少年份信息。Pandas默认会把这类日期的年份推断为公元1年(即1-04-07),而numpy的datetime64[ns]类型支持的时间范围是1677年至2262年,公元1年远远超出这个范围,因此触发“Out of bounds nanosecond timestamp”错误。
解决方案
你需要明确指定年份,让Pandas生成合法的时间戳,有两种常用方式:
- 直接在
pd.to_datetime中指定年份和日期格式:
df['Date'] = pd.to_datetime(df['Date'], format='%b %d', year=2023) # 替换为实际比赛年份
这里%b匹配月份缩写(如Apr),%d匹配日期(带不带前导零都能识别,所以Apr 7不用补零也没问题)。
- 先给日期字段拼接年份,再转换:
df['Date'] = '2023 ' + df['Date'] # 拼接年份 df['Date'] = pd.to_datetime(df['Date'])
内容的提问来源于stack exchange,提问作者Addison Choi
相关产品推荐
相关产品推荐

