如何处理超出熊猫时间戳范围的日期?

时间:2021-06-26 16:59:30

标签: python pandas timestamp

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

unsigned int

我发现熊猫支持 1677 年的时间戳

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

我检查了一些解决方案,例如建议使用 >>> pd.Timestamp.min Timestamp('1677-09-21 00:12:43.145225') 但删除此条目/使其为 null 不是一种选择。 你能建议一种方法来处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

正如 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")

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

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()
<头>
日期 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