我正在使用 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 不是一种选择。
你能建议一种方法来处理这个问题吗?
答案 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