如何处理 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
我正在使用 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