我有一个大型数据库,我正在加载到内存缓存中。我有一个进程,每天都在迭代数据。
最近这个过程开始抛出以下错误:
第 OverflowError: date value out of range
行
start_day = start_day - datetime.timedelta(days = 1)
这是在Ubuntu 14.04.5上的Python 3.4.3中运行
答案 0 :(得分:1)
您已达到datetime.date.min
,或第1年1月的第一天:
>>> from datetime import date, timedelta
>>> date.min
datetime.date(1, 1, 1)
>>> date.min - timedelta(days=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: date value out of range
如果您从datetime.date.today()
开始,那么您的代码需要超过736k步才能到达目的地:
>>> date.today().toordinal()
736766
您的代码可能在某个地方出现了一个经常减少的错误。
答案 1 :(得分:1)
为了克服错误,你可以改变
datetime.date(1, 1, 1)
更多更大的价值,如
datetime.date(2, 2, 2)
但如果您编辑时间列,例如请注意您在此列中的日期是人为的 2、2、2 或其他内容
答案 2 :(得分:-1)
如果您在使用 Pandas 读取 excel/csv 文件时遇到此问题,请检查您的 excel/csv 文件,任何一列或多列都将具有类似 ############# 的值,即平均值为负数,例如:(-11111) 或日期太长而无法放入单元格
import pandas as pd
df = pd.read_excel(file path,dtype='string') #this will convert all the column
type to string
or if you want to convert specific column then
df = pd.read_excel(file path,converters={'column name':str})