如何处理 pandas 中超出时间戳范围的日期?

How to handle dates which is out of timestamp range in pandas?

我正在使用 Crunchbase 数据集。我有一个哈佛大学的条目,它成立于 1636 年。当我尝试将字符串转换为 DateTime 时,这个条目给我一个错误。

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1636-09-08 00:00:00

我发现 pandas 支持从 1677 开始的时间戳

>>> pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')

我检查了一些解决方案,例如建议使用 errors='coerce' 的解决方案,但删除此条目/使其为空不是一种选择。 您能否建议一种处理此问题的方法?

Henry 的评论中所述,pandas 时间戳存在限制,因为它以 float64 表示,您可以在需要时使用 datetime 库解析日期时间来解决它,否则让它保留为字符串或将其转换为整数

场景 1:如果您打算仅在打印时显示此值

datetime_object = datetime.strptime('1636-09-08 00:00:00', '%Y-%m-%d %H:%M:%S')

场景 2:如果您想将其用作日期列以在数据框中保留信息,您还可以

datetime_object.strftime("%Y%m%d%H%M%S")

在 pandas 数据框中的列上使用它会产生这个

df=pd.DataFrame([['1636-09-08 00:00:00'],['1635-09-09 00:00:00']], columns=['dates'])
df['str_date']=df['dates'].apply(lambda x:datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
df.head()
dates str_date
0 1636-09-08 00:00:00 1636-09-08 00:00:00
1 1635-09-09 00:00:00 1635-09-09 00:00:00

pandas 将此列视为对象列,但当您访问它时,它是一个日期时间列

df['str_date'][0]
>>datetime.datetime(1636, 9, 8, 0, 0)

此外,为了完整起见添加:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-oob