如何不绘制缺失的时期
Posted
技术标签:
【中文标题】如何不绘制缺失的时期【英文标题】: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 值,但根本没有数据(甚至在时间索引中也没有)。
【问题讨论】:
【参考方案1】:考虑pd.Series
s
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()
0
s 不会被跳过。
我建议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)
以上是关于如何不绘制缺失的时期的主要内容,如果未能解决你的问题,请参考以下文章
Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?