解决pd.to_datetime转换MMM YY格式Series的OutOfBoundsDatetime错误
解决
OutOfBoundsDatetime 错误:转换"MMM YY"格式字符串为datetime类型 问题原因
执行pd.to_datetime(dim_data["mmm yy"])时触发OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-05-22 00:00:00错误,是因为pandas默认将"May 22"这类两位年份的字符串解析为公元1年5月22日,该时间早于pandas纳秒时间戳支持的下限(1677-09-21),导致越界。
解决方案
1. 明确指定解析格式(推荐)
通过format参数告诉pandas字符串的格式,确保两位年份被解析为20xx年:
dim_data["mmm yy"] = pd.to_datetime(dim_data["mmm yy"], format="%b %y")
%b:匹配英文月份缩写(如May、Jul)%y:匹配两位年份,pandas默认将其映射到1969-2068区间(即"22"会被解析为2022年)
2. 控制显示格式(可选)
如果需要保持datetime类型的同时,显示为"MMM YY"格式,可设置pandas的全局显示选项:
# 先转换为datetime类型 dim_data["mmm yy"] = pd.to_datetime(dim_data["mmm yy"], format="%b %y") # 设置显示格式(仅改变可视化效果,底层仍是datetime类型) pd.options.display.date_format = '%b %y'
3. 排查异常数据
若转换仍失败,可先检查是否存在不符合"MMM YY"格式的异常值:
# 将无法解析的行设为NaT,筛选出异常行 invalid_rows = dim_data[pd.to_datetime(dim_data["mmm yy"], format="%b %y", errors="coerce").isna()] print("异常数据行:") print(invalid_rows)
内容的提问来源于stack exchange,提问作者aleeeena
相关产品推荐
相关产品推荐

