gpt4 book ai didi

python - 如何在 python 中创建时间戳的线性空间?

转载 作者:太空狗 更新时间:2023-10-30 02:57:17 25 4
gpt4 key购买 nike

在给定开始/停止时期和所需的中间元素数量的情况下,是否有任何方法可以创建一系列等间距的日期时间对象?

t0 = dateutil.parser.parse("23-FEB-2015 23:09:19.445506")
tf = dateutil.parser.parse("24-FEB-2015 01:09:22.404973")
n = 10**4
series = pandas.period_range(start=t0, end=tf, periods=n)

这个例子失败了,也许 pandas 不打算提供频率短于一天的日期范围?

我可以手动估计一个频率,即 (tf-t0)/n,但我担心天真地重复添加这个时间增量(到开始时期)会在我接近结束时期时累积显着的舍入误差。

我可以只使用 float 而不是日期时间对象。 (例如,从结束时期减去开始时期,并将 timedelta 除以某个单位,例如秒,然后简单地应用 numpy linspace ..)但是将所有内容都转换为 float (并仅在需要时转换回日期)牺牲了特殊数据类型的优点(更简单的代码调试)。这是最好的解决方案吗?

最佳答案

解决方法*是使用 numpy 的 linspace :

In [11]: np.linspace(pd.Timestamp("23-FEB-2015 23:09:19.445506").value, pd.Timestamp("24-FEB-2015 01:09:22.404973").value, 50, dtype=np.int64)
Out[11]:
array([1424732959445506048, 1424733106444678912, 1424733253443851520,
1424733400443024384, 1424733547442197248, 1424733694441370112,
1424733841440542720, 1424733988439715584, 1424734135438888448,
1424734282438061312, 1424734429437233920, 1424734576436406784,
...
1424739133410763520, 1424739280409936384, 1424739427409108992,
1424739574408281856, 1424739721407454720, 1424739868406627584,
1424740015405800192, 1424740162404973056])

In [12]: pd.DatetimeIndex(np.linspace(pd.Timestamp("23-FEB-2015 23:09:19.445506").value, pd.Timestamp("24-FEB-2015 01:09:22.404973").value, 50, dtype=np.int64))
Out[12]:
DatetimeIndex(['2015-02-23 23:09:19.445506048',
'2015-02-23 23:11:46.444678912',
'2015-02-23 23:14:13.443851520',
'2015-02-23 23:16:40.443024384',
...
'2015-02-24 01:04:28.406627584',
'2015-02-24 01:06:55.405800192',
'2015-02-24 01:09:22.404973056'],
dtype='datetime64[ns]', freq=None)

*直接使用date_range:

In [21]: pd.date_range("23-FEB-2015 23:09:19.445506", "24-FEB-2015 01:09:22.404973", periods=10**4)
...
ValueError: Must specify two of start, end, or periods

关于python - 如何在 python 中创建时间戳的线性空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com