【问题标题】:How to plot a Pandas df with index timestamp being over midnight, but same date如何绘制索引时间戳超过午夜但日期相同的 Pandas df
【发布时间】:2018-05-18 13:05:07
【问题描述】:

我在夜间完成了一些传感器记录的数据。我想用 pyplot 将结果绘制成图表。源文件是时间戳、值的 csv。对于解析日期,我使用: pd.read_csv(..., date_parser=pd.datetime.strtime(x, 'H%:%M:%S:%f'),...)

数据的时间戳是从 23:30:00:000 到 02:30:00:000(唯一时间)。在绘制我的数据框 pyplot 时,假设我想在 23:59:59 之后绘制的数据应该是在同一天早些时候绘制的。这是因为所有时间戳的日期(日期)都是相同的,即使改变了这一天也是如此。
... 1900-01-01 23:20:27.832 95.0 1900-01-01 23:20:28.165 95.0 ... ... 1900-01-01 02:01:14.247 95.0 1900-01-01 02:01:14.580 95.0 ...

因此,问题是,我可以以及如何忽略日期并按顺序绘制小时/时间。 或者,如何在需要时从 cvs 中读取将一天添加到时间戳的数据。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    您必须将日期(或相对日期)添加到出现在午夜之后的时间戳中,然后 matplotlib 才能正确排序时间戳。

    由于您的每日数据记录在23:30 并在第二天的23:30 之前停止,您可以使用它来更新日期

    假设时间列名为tstamp

    ts = pd.Timestamp('1900-01-01 23:30:00')
    df.loc[df.tstamp < ts, 'tstamp'] = df.tstamp[df.tstamp < ts] + pd.Timedelta(days=1)
    

    但是,请注意,如果您录制的时间超过 24 小时,此方法将失败。

    【讨论】:

      【解决方案2】:

      假设您的 pdf 文件名为 df,我将通过日期进行递归,以确保每个人都高于前一个:

      datestoprocess=df["date"].values
      for i in range(1,len(datestoprocess)):
          datestoprocess[i]-= (datestoprocess[i-1]-datestoprocess[i]).days
      df["date"]=datestoprocess
      

      这会将每个日期设置在前一个日期之后,以防它在解析之前设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多