如何修复 pandas:时间戳(以纳秒为单位)超出范围
使用 pandas 时可能遇到的错误是:
OutOfBoundsDatetime : Out of bounds nanosecond timestamp: 2300-01-10 00:00:00
当您尝试创建超出以下范围的时间戳时,会出现此错误:
import pandas as pd #display minimum timestamp allowed print (pd. Timestamp . min ) 1677-09-21 00:12:43.145224193 #display maximum timestamp allowed print (pd. Timestamp . max ) 2262-04-11 23:47:16.854775807
以下示例展示了如何在实践中纠正此错误。
如何重现错误
假设我们尝试在 pandas 中创建一个包含以下三个日期的日期范围:
- 2020年1月1日
- 2150 年 1 月 1 日
- 2300 年 1 月 1 日
我们可以使用date_range()函数来尝试创建此日期范围:
import pandas as pd #attempt to create date range some_dates = pd. date_range (start=' 1/1/2000 ', end=' 1/1/2300 ', periods= 3 ) OutOfBoundsDatetime : Out of bounds nanosecond timestamp: 2300-01-10 00:00:00
我们收到OutOfBoundsDatetime错误,因为时间戳 1/1/2300 大于 pandas 允许的最大时间戳(以纳秒为单位)。
即使你不想以纳秒为单位存储时间戳,pandas 也会自动完成。
如何修复错误
解决此错误的最简单方法是使用error = ‘coerce’参数,该参数将最小或最大范围之外的所有时间戳强制为 NaT 值。
例如,我们可以使用以下代码创建一个日期范围,并自动将允许范围之外的所有时间戳强制为 NaT 值:
import pandas as pd #create date range some_dates = ['1/1/2000', '1/1/2150', '1/1/2300'] #convert date range to datetime and automatically coerce errors some_dates = pd. to_datetime (some_dates, errors = ' coerce ') #showdatetimes print (some_dates) DatetimeIndex(['2000-01-01', '2150-01-01', 'NaT'], dtype='datetime64[ns]', freq=None)
结果是一个包含三个日期时间值的日期范围,最后一个日期时间是 NaT,因为它超出了 pandas 允许的最大值。
请注意,这次创建日期范围时我们没有收到任何错误。
其他资源
以下教程解释了如何修复 Python 中的其他常见错误:
如何修复:列重叠但未指定后缀
如何修复:对象“numpy.ndarray”没有“append”属性
如何修复:如果使用所有标量值,则需要传递索引