使用pd.to_datetime()转换早于1700年日期时遇OutOfBoundsDatetime错误求助
解决pd.to_datetime转换早于1700年日期的OutOfBoundsDatetime错误
问题原因
pandas默认的datetime64[ns]类型依赖纳秒级时间戳,其可表示的日期范围为1677-09-21至2262-04-11。1516年这类早于1677年的日期超出了该范围,因此触发OutOfBoundsDatetime错误。
解决方案
以下是几种可行的处理方式:
使用Python原生datetime对象存储
借助dateutil库的解析器,将日期转为Python原生datetime对象(存储为pandas的object类型),支持更宽泛的日期范围:from dateutil import parser import pandas as pd df = pd.read_excel('Timeline_SecondMillenialH2.xlsx') df['Date'] = df['Date'].apply(lambda x: parser.parse(str(x)) if pd.notna(x) else x)改用pandas Period类型
Period类型专为处理广泛时间范围设计,适合历史日期场景:import pandas as pd df = pd.read_excel('Timeline_SecondMillenialH2.xlsx') df['Date'] = pd.to_period(df['Date'], format='%Y-%m-%d')若后续需要转回datetime格式(仅对1677-2262范围内日期有效),可使用
df['Date'].dt.to_timestamp()。临时规避:保留原始字符串(不推荐)
若仅需暂时绕过错误,可指定errors='ignore'保留原始字符串格式,但会丢失日期类型的运算优势:df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d', errors='ignore')
内容的提问来源于stack exchange,提问作者el_pazzu
相关产品推荐
相关产品推荐

