pd.to_datetime处理古老日期失败,Polars可正常运行,原因何在?
Pandas处理极古老日期失败的原因
这是pandas的固有限制,并非bug,核心差异源于两者底层依赖的日期类型范围:
- Pandas默认使用numpy的
datetime64[ns]类型存储日期,该类型的有效范围是1677-09-21 00:12:43到2262-04-11 23:47:16。早于1677年的日期超出这个范围,会被强制转为NaT(Not a Time)。 - Polars采用自研的日期类型(基于Rust的chrono库),支持的日期范围远更广,覆盖公元前4713年到公元292277026年,因此可以正常解析1672年这类极古老日期。
Pandas中处理极古老日期的解决办法
如果需要在pandas中解析早于1677年的日期,可以指定engine='python',切换到Python标准库的datetime模块解析(该模块支持的日期范围从公元1年开始,部分版本可支持更早):
import pandas as pd dates = ["12/31/1672","12/31/1677","10/19/2024"] df = pd.DataFrame(dates, columns=['Date']) # 使用Python引擎解析 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y', errors='coerce', engine='python') print(df)
输出结果:
Date 0 1672-12-31 1 1677-12-31 2 2024-10-19
注意:engine='python'的解析速度比默认numpy引擎慢,适合小到中等规模数据集。
内容的提问来源于stack exchange,提问作者jack strauss
相关产品推荐
相关产品推荐

