【问题标题】:pandas timeseries use time relative to beginning熊猫时间序列使用时间相对于开始
【发布时间】:2013-01-29 19:45:19
【问题描述】:

我正在从文件中读取一些 csv 日志数据,并使用日期、时间字段作为帧的索引。当我绘制时间序列时,绝对时间显示在 X 轴上。我想在 x 轴上显示相对于开始时间的时间。如何做到这一点?

例如:这是一个示例 x 轴:

 23:59:57--------+23:59:58----------23:59:59--------+00:00:00--------------+

我想要这样:

 0---------00:00:01----------00:00:02--------+00:00:03--------------+

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    由于索引的数据类型从 DatetimeIndex 更改为对象,因此每一行都打印在单独的存储桶中。

    【讨论】:

    • 现在通过这样做解决了问题: start_t=pd.tslib.Timestamp(df.index[0].date()) df.index = [ pd.tslib.Timestamp(start_t + (idx - df.index[0])) 用于 df.index 中的 idx]
    【解决方案2】:

    一个简单的解决方案是从索引中减去第一个索引项。这可以通过使用列表理解来完成,如果您的 Dataframe 非常大,这可能不是最佳(最快)选项。

    begin = pd.datetime(2013,1,5,5,53)
    end = pd.datetime(2013,1,7,7,16)
    
    rng = pd.DatetimeIndex(start=begin, end=end, freq=pd.datetools.Minute(15))
    df = pd.DataFrame(np.random.randn(rng.size), index=rng)
    
    fig, axs = plt.subplots(2,1, figsize=(15,6))
    fig.subplots_adjust(hspace=.5)
    
    df.plot(ax=axs[0])
    axs[0].set_title('Original')
    
    df.index = [idx - df.index[0] for idx in df.index]
    df.plot(ax=axs[1])
    axs[1].set_title('Normalized')
    

    【讨论】:

    • 太好了,谢谢。从 csv 读取数据帧后,我尝试了类似的方法:df.date_time = df.date_time - df.date_time[0],错误提示“'Timestamp' 对象没有属性 'dtype'”。我现在就试试你的解决方案。
    • @Rutger_Kassies 我看到执行 df.index = [idx - df.index[0] for idx in df.index] 会将索引的数据类型更改为 Objects 而不是 DatetimeIndex,即更改图形输出。我会将输出图像作为单独的答案发布,以便您了解发生了什么。我会调查自己以修复它,但如果您有任何线索,请在此处发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2020-06-23
    • 1970-01-01
    • 2014-10-08
    • 2020-08-20
    相关资源
    最近更新 更多