如何以24小时为间隔绘制熊猫数据框? (多个地块)

时间:2019-05-09 15:28:05

标签: python-3.x pandas dataframe matplotlib time

我有一个大约3年的熊猫数据框,分辨率为6秒,我想将数据分组为24小时制,并每天使用matplotlib循环绘制。 这是我数据框的头部:

  timestamp                    consumption
0 2012-11-11 12:00:03          468
1 2012-11-11 12:00:09          476
2 2012-11-11 12:00:16          463
3 2012-11-11 12:00:22          449
4 2012-11-11 12:00:28          449 

它包括从2012年到2015年一间房屋的功耗。经过预处理后,数据帧在第一天的下午12点开始。我需要以24小时为间隔绘制所有数据框,并且每个图都必须代表一天,从下午12点开始,直到第二天的下午12点结束。

因此,我需要大约 1500个图,以显示从下午12点开始的每一天的耗电量,大约是数据帧的1500天。

谢谢。

更新:我想分别绘制1500天的原因是,我想检查每晚的功耗并标记乘员的睡眠方式。我认为每天从12 pm到12 pm都有一个完整的睡眠周期。在准备好标签后,我将它们用作分类的训练和测试数据

2 个答案:

答案 0 :(得分:0)

这不仅是一个答案,而且是一个建议。首先,将“时间戳”列转换为索引(DatetimeIndex)

df.set_index(df['timestamp'], inplace=True, drop=True)

然后,获取DataFrame中发生的所有独特情况

unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))

然后将DataFrame压缩为一个系列

del df['timestamp']
df = df.squeeze()

现在,只需在单独的子图中绘制系列中独特的日子即可。

import matplotlib.pyplot as plt

unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))
fig, axes = plt.subplots(nrows=len(unique_days), ncols=1)

row = 0
for day in unique_days:
    df[day].plot(ax=axes[row], figsize=(50,10))
    row += 1

plt.show()

Plot for two sample days

现在,是时候使用plots的参数了,以便您可以根据需要自定义它们了。

答案 1 :(得分:0)

这是一个奇怪的请求。如果我们知道您的最终目标是什么,可能会更容易理解,但我将假设您要绘制然后保存每一天的数字。

df['day'] = (df['timestamp'] + pd.Timedelta('12h')).dt.date
for day in df['day'].unique():
    mask = (df['day'] == day)
    #<the code for the plot that you want>
    plt.plot(x=df[mask]['timestamp'].dt.time,y=df[mask]['consumption'])
    plt.savefig('filename'+str(day)+'.png')
    plt.close()