如何绘制一个Pandas df,其索引时间戳超过午夜,但日期相同

时间:2018-05-18 13:05:08

标签: python pandas matplotlib

我有一些来自传感器的记录数据在夜间完成。我想将结果绘制为带有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中读取数据,这些数据会在需要时将时间戳添加一天。

2 个答案:

答案 0 :(得分: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小时,此方法将失败。

答案 1 :(得分:0)

假设你的pdf被命名为df,我只会在日期中递归以确保它们中的每个都高于前一个:

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

如果之前通过解析设置了日期,则将每个日期设置为前一个日期。