给定开始/停止时期和所需的中间元素数量,是否有任何方法可以创建一系列等距的日期时间对象?
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)
这个例子失败了,也许熊猫不是打算给频率范围小于一天的日期范围吗?
我可以手动估计一个频率,即(tf-t0)/ n,但是我担心,天真地反复将此时间增量(添加到开始时期)会在我接近结束时期时累积大量舍入误差。
我可以求助于仅使用浮点数而不是日期时间对象。(例如,从结束纪元减去开始纪元,然后将timedelta除以某个单位(例如秒),然后简单地应用numpy linspace。)但是将所有内容强制转换为浮点数(仅在需要时才转换回日期)会牺牲特殊数据类型的优点(简单的代码调试)。这是最好的解决方案吗?
解决方法*是使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句