从2D每小时DataFrame绘制1D时间序列

时间:2017-12-07 19:49:41

标签: python pandas datetime

我试图绘制从我的公用事业提供商处下载的一年的实用数据。数据以矩阵形式提供,其中每一行是不同的一天(最近一次是在顶部),每列是一天中的一小时(上午11:00,中午12:00,下午1:00等)。我想将这个2D DataFrame转换为1D时间序列,然后绘制该系列。

使用.stack()让我接近,但我似乎无法在堆叠后的日期和时间列中创建日期时间。此外,绘制时,它从左到右正确绘制小时,但日期从左到右下降。例如,它描绘了第25天(凌晨1点,凌晨2点,凌晨3点等),第24天(凌晨1点,凌晨2点,凌晨3点等),第23天(凌晨1点,凌晨2点,凌晨3点等)。我确定在创建真正的日期时间之后这将自行修复。

下面的代码生成一个小样本df,但在实际数据集中,所有24小时都是列,一年中的所有日期都是行。

df=pd.DataFrame({'Date':['06/25/17','06/24/17','06/23/17'], '12:00 AM':
[1,2,3],'1:00 AM':[4,5,6],'2:00 AM':[7,8,9],})
df.set_index(['Date'], inplace = True)
df

目标是建立一个系列,其中索引是时间序列,实用程序用法是数据。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你需要unstack你的数据框,连接列Datelevel_0来制作时间戳。然后将索引设置为时间戳并删除多余的列。

df=pd.DataFrame({'Date':['06/25/17','06/24/17','06/23/17'], '12:00 AM':
[1,2,3],'1:00 AM':[4,5,6],'2:00 AM':[7,8,9],})
df.set_index(['Date'], inplace = True)

#Unstack and reset index
df = df.unstack().reset_index()

#concatenate timestamp and convert to datetime
df['Timestamp'] = df['Date'] + ' '+ df['level_0']
df['Timestamp'] = pd.to_datetime(df['Timestamp'],format="%m/%d/%y %I:%M %p")
df =df.sort_values(by='Timestamp')
df = df.set_index('Timestamp')

#drop extra columns
df = df.drop(['Date','level_0'],axis=1)

返回df,如下所示:

                     0
Timestamp             
2017-06-23 00:00:00  3
2017-06-23 01:00:00  6
2017-06-23 02:00:00  9
2017-06-24 00:00:00  2
2017-06-24 01:00:00  5
2017-06-24 02:00:00  8
2017-06-25 00:00:00  1
2017-06-25 01:00:00  4
2017-06-25 02:00:00  7

然后您可以使用

绘制时间序列
df.plot()

产量: enter image description here