我试图绘制从我的公用事业提供商处下载的一年的实用数据。数据以矩阵形式提供,其中每一行是不同的一天(最近一次是在顶部),每列是一天中的一小时(上午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
目标是建立一个系列,其中索引是时间序列,实用程序用法是数据。
谢谢!
答案 0 :(得分:0)
我认为你需要unstack你的数据框,连接列Date
和level_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()