python - 在大熊猫中添加 2262 年之后的时间
问题描述
我想在熊猫中添加迄今为止的月份。它们可能会超过 2262 年。对于相对较少的月份,有一个解决方案:
import numpy as np
import pandas as pd
pd.Timestamp('2018-01-22 00:00:00') + np.timedelta64(12, 'M')
这导致
Timestamp('2019-01-22 05:49:12')
但是,当我添加更大的数字时(因此,超过了 2262 年):
pd.Timestamp('2018-01-22 00:00:00') + np.timedelta64(3650, 'M')
Python 确实返回结果:
Timestamp('1737-09-02 14:40:26.290448384')
如何应对?
解决方案
datetime
Pandas.Timestamp 旨在将更精细的时间分辨率处理到纳秒级。此精度占用了分配给它的 64 位中的足够多,以至于它只能上升到 2262 年。但是,datetime.datetime
没有这个限制并且可以上升到 year 9999
。如果您开始使用datetime
对象而不是Timestamp
对象,您将失去一些功能,但您将能够超越2262
.
此外,您的月数也超出了最大天数Timedelta
让我们从选择一个更合理的月份数开始,它是 48(四年)的好倍数。
d = pd.Timedelta(48, 'M')
还有我们的约会
t = pd.Timestamp('2018-01-22')
一个倍数,表示我们的 48 个月适合所需的 3650 个月的次数。
m = 3650 / 48
然后我们可以使用to_pydatetime
和to_pytimedelta
t.to_pydatetime() + d.to_pytimedelta() * m
datetime.datetime(2322, 3, 24, 14, 15, 0, 1)
推荐阅读
- css - 样式化的组件不适用于层次选择器
- php - Laravel - 在 SQL 数据库中存储 JSON 响应(通过 Guzzle)
- c++ - 如何将静态数组初始化为 C++ 函数中的某个值?
- reactjs - 无法使用 fetch() 将选项选项加载到 SelectInput 中
- python-3.x - 如何在 python3 中发送 http 2.0 伪标头
- java - java servlet 出现 404 错误。看不到html文件
- c# - 增加 DataGridView 中水平网格线的高度?
- python - 使用 einsum 的张量接触
- python - 字符串到 JSON Python
- sql-server - 为 HTML 输出编码 SQL Server SELECT 语句