Python将类型'datetime.timedelta'转换为'pandas.tseries.offsets'

时间:2013-10-14 13:04:51

标签: python pandas

如何在Python中将'datetime.timedelta'对象转换为'pandas.tseries.offsets'? 例如:datetime.timedelta(1)to_offset('1D')

长篇故事:我想用OHLC条形图绘制Pandas DataFrame,但是当数据点太多时,条形图太薄而图表变得无法读取。在这种情况下,我想计算一个较长周期的条形图,以便在我的图表上得到少于100个条形图。

给定一个DataFrame df(数据可以是第二到每月周期之间的任何数据)

  1. 第1步:获取数据帧周期:

    source_period = min([t2-t1 for t2, t1 in zip(df.index[1:], df.index[:-1])])

    (我不能在这里使用df.index.freq)

  2. 第2步:估算目标期:

    target_period = source_period * float(len(df.index))/100

  3. 第3步:分组合并数据

    grouped_df = df.groupby(pd.TimeGrouper(period_convert(target_period ))).agg(ohlc_combine)

  4. 我想念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)
    

    问题:丑陋,缓慢,前卫的案件未得到处理......

1 个答案:

答案 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'

但这几乎和处理一样难。

实际上有一个函数可能很好。