【问题标题】:Plotting 1D Time Series from 2D Hourly DataFrame从 2D Hourly DataFrame 绘制 1D 时间序列
【发布时间】:2017-12-07 19:49:41
【问题描述】:

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

使用 .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

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

谢谢!

【问题讨论】:

  • 正确的最终格式将按时间顺序排列,而不是按数据值排序:06/23/17 12:00 3 06/23/17 1:00 6 06/23/17 2 :00 9 06/24/17 12:00 2 06/24/17 1:00 5 06/24/17 2:00 8 等
  • 查看我修改后的帖子。最初,我忘记将索引转换为时间戳。一旦数据类型正确,您就可以按时间顺序绘制,而不管数据框中的顺序如何。

标签: python pandas datetime


【解决方案1】:

我认为您需要 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()

产量:

【讨论】:

  • 谢谢!这正是我想要的。
  • @TheGadgeteer 太棒了!请考虑接受答案
  • @thegadgeteer 查看我修改后的解决方案。一旦我注意到您的时间戳包含上午或下午,我就添加了正确的日期格式。
  • 你知道如何去掉日期,只画小时(和分钟)吗?
猜你喜欢
  • 2013-03-30
  • 2020-04-20
  • 2022-01-13
  • 2017-09-28
  • 2016-11-06
  • 2021-10-24
  • 2015-04-02
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多