如何修复 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”属性
如何修复:如果使用所有标量值,则需要传递索引

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注