You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas.read_csv使用parse_dates参数时超2150年日期无法解析如何解决

问题根因

pandas默认使用datetime64[ns](纳秒精度)类型存储日期时间,受64位整数存储上限限制,该类型可表示的时间范围仅为1677年9月到2262年4月。当待解析的日期年份超出该范围时,内置的自动日期解析逻辑会失败,对应列就会保留为object类型的字符串,你观测到的2150年阈值属于该范围边界附近的测试表现。

可行解决方案

方案1:指定日期格式解析

如果不需要使用pandas datetime的向量化操作,可直接指定日期格式完成解析:

  • pandas 2.0及以上版本可直接传入date_format参数:
import pandas as pd

df = pd.read_csv('files/Test_Excep.csv',
                 delimiter=",", 
                 parse_dates= ['col1_date','col2_date','col3_dt'],
                 date_format="%Y-%m-%d")
  • 低版本pandas可传入自定义解析函数:
from datetime import datetime
import pandas as pd

custom_date_parser = lambda x: datetime.strptime(x, "%Y-%m-%d")
df = pd.read_csv('files/Test_Excep.csv',
                 delimiter=",", 
                 parse_dates= ['col1_date','col2_date','col3_dt'],
                 date_parser=custom_date_parser)

该方案下超出datetime64[ns]范围的日期会转为Python原生datetime对象,依然支持常规的日期比较、年月提取操作。

方案2:转换为低精度datetime64类型

如果需要保留pandas datetime的向量化操作能力,可将日期转换为秒/毫秒精度的datetime64类型,这两类精度的时间范围上限远高于2500年:

import pandas as pd

df = pd.read_csv('files/Test_Excep.csv', delimiter=",")

date_cols = ['col1_date','col2_date','col3_dt']
for col in date_cols:
    # 转换为秒精度的datetime64类型
    df[col] = pd.to_datetime(df[col], format="%Y-%m-%d").astype('datetime64[s]')

方案3:使用Period类型存储

如果所有日期都没有时间部分,可使用按天精度的Period类型存储,支持更大的年份范围:

import pandas as pd

df = pd.read_csv('files/Test_Excep.csv',
                 delimiter=",",
                 dtype={
                     'col1_date': 'period[D]',
                     'col2_date': 'period[D]', 
                     'col3_dt': 'period[D]'
                 })

内容的提问来源于stack exchange,提问作者mssr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:54:03