【问题标题】:How not to plot missing periods如何不绘制缺失的时期
【发布时间】:2017-06-12 22:40:28
【问题描述】:

我正在尝试绘制时间序列数据,其中某些时期没有数据。数据被加载到数据框中,我正在使用df.plot() 绘制它。问题是缺失的时期在绘图时会连接起来,给人的印象是该时期存在价值,而事实并非如此。

这是一个问题的例子

9 月 1 日至 9 月 8 日以及 9 月 9 日至 9 月 25 日之间没有数据,但数据的绘制方式似乎在该期间存在值。

我希望在该期间显示零值,或者根本没有值。该怎么做?

为了清楚起见,我没有 [Sep 01, Sep 08], [Sep 09, Sep 29] 期间的 NaN 值,但根本没有数据(甚至在时间索引中也没有)。

【问题讨论】:

    标签: python pandas plot time-series nan


    【解决方案1】:

    考虑pd.Seriess

    s = pd.Series(
        np.arange(10), pd.date_range('2016-03-31', periods=10)
    ).replace({3: np.nan, 6: np.nan})
    
    s.plot()
    

    你可以看到np.nan被跳过了。
    然而:

    s.fillna(0).plot()
    

    0s 不会被跳过。

    我建议s.replace(0, np.nan).plot()

    【讨论】:

      【解决方案2】:

      您应该使用 NaN 值将缺失的日期添加到您的数据框中。然后,在绘制时,这些 NaN 打破了这条线——你会得到几条线段,它们之间有空的句点。

      This answer 最好地解释了如何将缺失的日期添加到您的数据框中。总而言之,这应该可以解决问题:

      df = df.reindex(pd.DatetimeIndex(df.index), fill_value=NaN)
      

      【讨论】:

      • 最好是df = df.reindex(pd.DatetimeIndex(df.index)),默认添加NaN。如果要指定NaN - df = df.reindex(pd.DatetimeIndex(df.index), fill_value=np.nan)
      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2018-01-11
      • 2014-06-09
      • 2021-11-08
      • 2019-02-23
      相关资源
      最近更新 更多