使用Pandas to_datetime()转换多格式日期列时,年份超过3000无法正常转换的问题
解决Pandas处理超3000年日期的问题
这个问题的根源在于Pandas默认使用的datetime64[ns]类型有时间范围限制——它基于numpy的datetime64,只能处理公元1677年到2262年之间的日期,超过这个范围的日期就会触发OutOfBoundsDatetime错误或者被转为NaT。下面给你几个实用的解决办法:
方法1:转换为Python原生datetime对象(无范围限制)
Python标准库的datetime对象没有时间范围限制,我们可以用它来替代Pandas默认的datetime类型。如果你的日期格式多样,可以借助dateutil.parser自动识别格式(需要先安装python-dateutil:pip install python-dateutil):
import pandas as pd from dateutil import parser # 你的原始数据 data = [['A', '2021-08-08'], ['B', '2021/08/08'], ['C', '3031-08-08']] df = pd.DataFrame(data, columns = ['Name', 'Date']) # 转换为Python原生datetime df['Date'] = df['Date'].apply(parser.parse)
转换后,Date列会变成object类型,但每个元素都是合法的datetime对象,3031年的日期也能正常保留:
| Name | Date |
|---|---|
| A | 2021-08-08 00:00:00 |
| B | 2021-08-08 00:00:00 |
| C | 3031-08-08 00:00:00 |
如果不想依赖第三方库,也可以自己写一个函数尝试多种格式解析:
import datetime def parse_custom_date(date_str): # 列出你需要支持的日期格式 possible_formats = ['%Y-%m-%d', '%Y/%m/%d'] for fmt in possible_formats: try: return datetime.datetime.strptime(date_str, fmt) except ValueError: continue # 如果所有格式都不匹配,可以抛出错误或返回原字符串 raise ValueError(f"无法解析日期: {date_str}") df['Date'] = df['Date'].apply(parse_custom_date)
方法2:使用Pandas的Period类型(支持时间运算)
如果你需要保留Pandas的时间运算能力(比如加减天数、按日期筛选),可以用Period类型,它支持的时间范围比datetime64[ns]大得多:
import pandas as pd data = [['A', '2021-08-08'], ['B', '2021/08/08'], ['C', '3031-08-08']] df = pd.DataFrame(data, columns = ['Name', 'Date']) # 转换为Period类型(freq='D'表示按天精度) df['Date'] = df['Date'].apply(lambda x: pd.Period(x, freq='D'))
转换后,你可以正常进行时间操作,比如:
# 给日期加1天 df['Date'] + pd.offsets.Day(1) # 输出结果:0 2021-08-09, 1 2021-08-09, 2 3031-08-09
方法3:统一为字符串格式(仅适合存储/展示)
如果不需要对日期进行运算,只是想统一格式后保留,可以先将所有日期转为ISO标准格式的字符串:
import pandas as pd from dateutil import parser data = [['A', '2021-08-08'], ['B', '2021/08/08'], ['C', '3031-08-08']] df = pd.DataFrame(data, columns = ['Name', 'Date']) # 先解析为datetime再转为ISO字符串 df['Date'] = df['Date'].apply(lambda x: parser.parse(x).isoformat())
这样所有日期都会变成YYYY-MM-DDTHH:MM:SS格式的字符串,方便后续统一处理。
内容的提问来源于stack exchange,提问作者richa bharwal
相关产品推荐
相关产品推荐

