pandas 0.24.2版本Period调用to_timestamp转换结果错误问题
问题根因说明
- Timestamp存储范围限制:pandas的
Timestamp类型底层默认用64位有符号整数存储纳秒级时间戳,合法可表示的时间范围为1677-09-21 00:12:43.145225~2262-04-11 23:47:16.854775807。你构造的Period对应时间为2405年,已经远超出该范围。 - 旧版本pandas的静默溢出问题:你使用的0.24.2属于较早的pandas版本,该版本在处理超出时间范围的转换逻辑时,不会主动抛出溢出错误,会直接发生整数溢出回绕,因此得到了完全不符合预期的1821年错误结果。更高版本的pandas已经修复了该逻辑,遇到同类场景会直接抛出
OutOfBoundsDatetime异常提示,不会返回错误的时间值。
可选解决方案
如果确实需要处理2262年之后的时间,可以选择以下两种方案:
- 降低时间存储精度,比如改用秒、毫秒级精度存储时间,避免触出纳秒范围限制
- 升级pandas到1.0以上版本,至少先获得明确的异常提示避免静默产生错误数据
内容的提问来源于stack exchange,提问作者dubbbdan
相关产品推荐
相关产品推荐

