【问题标题】:Python TimeSeries ploting problem with holidays (no rows dates and times)假期的Python时间序列绘图问题(没有行日期和时间)
【发布时间】:2020-07-15 17:17:37
【问题描述】:

我正在尝试使用日期时间索引(时间序列)绘制一列熊猫数据框。某些日期和时间在数据框中没有行,当我要使用简单的df['column_name'].plot() 绘制它时,在日期时间的 x 轴上,它显示数据框中没有行的日期和时间,并将这些空天之前的数据连接到之后的日期。

我应该如何在绘图中摆脱这些空行?

【问题讨论】:

  • 您的要求并不完全清楚。你能提供更多细节吗?您尝试制作的图表类型是什么?能否请您绘制示例图像并附上?
  • 图片已添加。例如,在 3 月 19 日至 22 日之间,我的数据框在数据框上没有行,但在图中,考虑了这段时间。正如您在图像中看到的那样,我想摆脱这个时期和许多其他时期。现在清楚了吗?
  • 差不多。你希望y轴在那里有一个跳跃,或者如果线图中只有一个“间隙”就可以了吗?
  • 不,我想在情节中跳过这些时期,即从我的情节中删除这些时期。因为在我的数据框中,这些时间段没有对应的行。
  • 最简单的方法是制作散点图而不是线图。例如df['AB'].plot(figsize=(10,6),linestyle='None',marker='.'),那么数据点之间将没有连接。如果要连接一些数据点,并且在一些数据点之间存在间隙,则必须定义何时连接和何时不连接,这通常有点棘手。不连接线就可以了吗?

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


【解决方案1】:

绘制线图时,绘图库不会自动知道哪些数据点之间应该画线,哪些点之间应该有间隙。

我认为,告诉库这一点最直接的方法是创建 NaN 行,以便索引反映您认为它应该反映的内容。 IE。如果您认为数据应该是每分钟,请确保数据帧索引是每分钟。

然后绘图库会理解存在 NaN 数据的地方,不应该画线。

代码示例:

# generate a dataframe with one column of 

df = pd.DataFrame(
    [
        ['2020-04-03 12:10:00',23.2],
        ['2020-04-03 12:12:00',23.1],
        ['2020-04-03 12:13:00',14.1], #notice the gap here!
        ['2020-04-03 12:24:00',23.1],
        ['2020-04-03 12:25:00',23.3],
     ],
    columns=['timestamp','value']
)
df['timestamp'] = pd.to_datetime(df.timestamp) # make sure that the timestamp data is stored as timestamps

然后我们创建重新索引数据,在需要的地方创建新的 nan-rows。

df = df.set_index('timestamp')
df = df.reindex(pd.date_range(start=df.index.min(),end=df.index.max(),freq='1min'))

终于画好了!

df['value'].plot(figsize=(10,6))

结果看起来像

【讨论】:

  • 问题是我想删除地块上 12:13:00 到 12:18:00 的空间。我的索引格式正确,索引格式没有问题。唯一的问题是删除时间轴上的空格
  • 我明白了。我不知道在那种情况下。可能会尝试直接操纵断轴。见这里:matplotlib.org/gallery/subplots_axes_and_figures/… 但这似乎需要做很多工作......
猜你喜欢
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 2020-12-29
  • 2022-01-13
  • 1970-01-01
  • 2014-09-04
  • 2021-05-28
  • 2018-05-04
相关资源
最近更新 更多