如何在Python中将'datetime.timedelta'
对象转换为'pandas.tseries.offsets'
?
例如:datetime.timedelta(1)
到to_offset('1D')
?
长篇故事:我想用OHLC条形图绘制Pandas DataFrame,但是当数据点太多时,条形图太薄而图表变得无法读取。在这种情况下,我想计算一个较长周期的条形图,以便在我的图表上得到少于100个条形图。
给定一个DataFrame df(数据可以是第二到每月周期之间的任何数据)
第1步:获取数据帧周期:
source_period = min([t2-t1 for t2, t1 in zip(df.index[1:], df.index[:-1])])
(我不能在这里使用df.index.freq)
第2步:估算目标期:
target_period = source_period * float(len(df.index))/100
第3步:分组合并数据
grouped_df = df.groupby(pd.TimeGrouper(period_convert(target_period ))).agg(ohlc_combine)
我想念period_convert
函数,我真的不知道从哪里开始。
为了有一个起点,我可笑的丑陋黑客这样做:
target_datapoints = 100
source_period = min([t2-t1 for t2, t1 in zip(df.index[1:], df.index[:-1])])
target_period = source_period.total_seconds() * float(len(df.index)) / target_datapoints
target_offset = str(int(target_period)) + 'S'
target_df = df.groupby(pd.TimeGrouper(target_offset)).agg(ohlc_combine)
问题:丑陋,缓慢,前卫的案件未得到处理......
答案 0 :(得分:1)
你可以直接构建它
e.g。说源期间为60S
,现在target_period为301S
,只需使用它。
如果你想将这些更改为“更大”的时间段,你可以这样做(需要numpy 1.7),(返回一个字符串):
In [18]: pd.tslib.repr_timedelta64(np.timedelta64(timedelta(seconds=301)).astype('m8[ns]'))
Out[18]: '00:05:01'
但这几乎和处理一样难。
实际上有一个函数可能很好。